Ich habe auf diesem "Gesetz des Demeter" Ding gelesen, und es (und reine "Wrapper" Klassen im Allgemeinen) scheinen im Allgemeinen Antimuster zu sein. Betrachten Sie eine Implementierungsklasse:Wrapper/Gesetz des Demeter scheint ein Anti-Muster zu sein
class FluidSimulator {
void reset() { /* ... */ }
}
Betrachten wir nun zwei verschiedene Implementierungen einer anderen Klasse:
class ScreenSpaceEffects1 {
private FluidSimulator _fluidDynamics;
public FluidSimulator getFluidSimulator() { return _fluidDynamics; }
}
class ScreenSpaceEffects2 {
private FluidSimulator _fluidDynamics;
public void resetFluidSimulation() { _fluidDynamics.reset(); }
}
Und die Art und Weise zu nennen, sagte Methoden:
callingMethod() {
effects1.getFluidSimulator().reset(); // Version 1
effects2.resetFluidSimulation(); // Version 2
}
Auf den ersten Blick, Version 2 scheint ein bisschen einfacher, und folgt der "Demeter-Regel", verstecken Foo's Implementierung, etc, etc. Aber dies bindet alle Änderungen in FluidSimulator an ScreenSpaceEffects. Zum Beispiel, wenn ein Parameter nicht zurückgesetzt wird hinzugefügt, dann haben wir:
class FluidSimulator {
void reset(bool recreateRenderTargets) { /* ... */ }
}
class ScreenSpaceEffects1 {
private FluidSimulator _fluidDynamics;
public FluidSimulator getFluidSimulator() { return _fluidDynamics; }
}
class ScreenSpaceEffects2 {
private FluidSimulator _fluidDynamics;
public void resetFluidSimulation(bool recreateRenderTargets) { _fluidDynamics.reset(recreateRenderTargets); }
}
callingMethod() {
effects1.getFluidSimulator().reset(false); // Version 1
effects2.resetFluidSimulation(false); // Version 2
}
In beiden Versionen muss callingMethod geändert werden, aber in Version 2, ScreenSpaceEffects auch geändert werden muss. Kann jemand den Vorteil eines Wrappers/einer Fassade erklären (mit Ausnahme von Adaptern oder dem Umhüllen einer externen API oder dem Freigeben einer internen API)?
EDIT: Eines von vielen reellen Beispielen, für die ich in dieses eher als ein triviales Beispiel lief.
Meinst du "Version 2 scheint ein bisschen einfacher"? –
Ja, tut mir leid, wird sich ändern –
Version 1 folgt nicht der Demeter-Regel. Mistyp? – Corwin