Ich sehe hier keine Verletzung.
Das Gesetz des Demeter, in Konzept schlägt vor, dass ein Unternehmen nur von seinen Nachbarn kennt, nicht fremd, so dass, wenn A
etwas von C
muss, soll es zu B
um es zu bekommen und nicht mehr weiter reden.
Ich würde nicht genau eine List
einen "Nachbarn" anrufen, um dieses Konzept zu übernehmen. Es ist ein Objekt, das eine Datenstruktur manipuliert, die Sie in Ihrem gesamten Programm verwenden können. Daher würde die Object
, die Ihre Liste enthält, als die B
zu Ihrer A
betrachtet werden.
Wenn List
eine tatsächliche Entität war, die in Ihrem Programm definiert ist, könnten Sie in diesem Fall Recht haben. Es würde mehr Sinn machen, wenn Ihre List
eine Methode hat, die Ihre Object
anfordert, einige Logik auszuführen (wie Sie in einem Kommentar, list.callSomethingOn(i)
, sagten).
Wenn diese bestimmte Instanz List
zu Ihrem Programm Logik ist von zentraler Bedeutung, und Sie sind unnachgiebig das Gesetz erfüllt, könnten Sie einen „Decorator“ für die List
verwenden, die mit den enthaltenen arbeiten weitere Methoden ergänzen Object
s
Können Sie erklären, wie Sie ein Demeter-Gesetz sehen? – Matthew
Vielleicht beschreiben Sie mehr von dem, was Sie tun möchten? Ich sehe hier kein Problem, es ist nicht so, als würdest du 10 Getter hintereinander rufen. – Tunaki
Ich weiß, das ist keine große Verletzung, aber es scheint immer noch wie ein Code-Geruch. Es ist eine LoD-Verletzung, da ich ein Objekt aus der ArrayList abruft und dann eine Methode für das abgerufene Objekt aufruft. Technisch sollte ich etwas wie list.callSomethingOn (i) tun, um das Demeter-Gesetz zu bewahren, aber das scheint auch falsch zu sein – kabeersvohra