Meine Lösung wäre:
Der Fuhrparkleiter fragt das Auto, was es für Sprit will, das fragt den Motor und der muss es schließlich wissen.
Klar. Das geht. Nur warum ist
if fuhrpark.eingeteiltesfahrzeug.motor.kraftoffart = diesel then einkaufsabteilung.dieselbestellen;
schlechter Stil? Genau das behauptet Demeter.
eingeteiltesfahrzeug implementiert IAuto. Über IAuto erfährt man die Kraftstoffart. (TAuto hat intern über seinen Member FMotor : IMotor Zugriff auf das Interface IMotor und die Kraftstoffart.)
Also vielleicht so:
Delphi-Quellcode:
aAuto : IAuto
aDieselMenge : Integer;
var
aDieselMenge := 0;
for aAuto in aFuhrpark do
if aAuto.Kraftstoffart = cDiesel then
inc(aDieselMenge, aAuto.Tankgroesse);
einkaufsabteilung.bestellen(cDiesel, aDieselMenge);
Entkopplung ist Mythos. Als Ausnahme lasse ich in der Tat nur die Entkopplung von
GUI/BL gelten. Und auch da nur bedingt.
Entkopplung funktioniert schon und mit Spring ohne große Klimmzüge. Es ist für Delphi neu und vielleicht auch ungewohnt, wenn man bisher anders erfolgreich war.