Diese besondere Implementierung, ja. Wenn Sie die Zustände zu konkreten Klassen machen und nicht zu abstrakten Implementierern, werden Sie davon abkommen.
Das Zustandsmuster, auf das Sie sich beziehen, ist jedoch im Allgemeinen etwas, mit dem ich nicht einverstanden bin, weil ich gesehen habe, wie es wächst. Ich denke, es gibt genügend Gründe, dies als Verstoß gegen das Prinzip der Einzelverantwortung zu bezeichnen, da diese Zustandsverwaltungsmuster letztendlich zentrale Aufbewahrungsorte für die Kenntnis des aktuellen Zustands vieler anderer Teile eines Systems sind. Diese zentralisierte Zustandsverwaltung erfordert häufig Geschäftsregeln, die für viele verschiedene Teile des Systems relevant sind, um sie angemessen zu koordinieren.
Stellen Sie sich vor, alle Teile des Systems, die sich um den Zustand kümmern, befänden sich in unterschiedlichen Diensten, unterschiedlichen Prozessen auf unterschiedlichen Maschinen, ein zentraler Statusmanager, der den Status für jeden dieser Bereiche detailliert angibt, führt effektiv zu Engpässen im gesamten verteilten System, und ich halte den Engpass für ein Zeichen einer SRP-Verletzung sowie allgemein schlechtes Design.
Im Gegensatz dazu würde ich vorschlagen, Objekte intelligenter zu gestalten als das Modellobjekt im MVC-Muster, bei dem das Modell weiß, wie es sich selbst behandelt, und keinen externen Orchestrator für die Verwaltung seiner internen Abläufe oder Gründe benötigt.
Selbst wenn Sie ein Statusmuster wie dieses in ein Objekt einfügen, damit es nur von selbst verwaltet wird, haben Sie das Gefühl, dass Sie dieses Objekt zu groß machen würden. Workflows sollten durch die Komposition verschiedener selbstverantwortlicher Objekte erfolgen, anstatt mit einem einzelnen orchestrierten Zustand, der den Fluss anderer Objekte oder den Fluss der Intelligenz in sich selbst verwaltet.
Aber an diesem Punkt ist es mehr Kunst als Engineering- und so ist es auf jeden Fall Ihren Ansatz dieser Dinge einig subjektiv ist, die besagten , die Prinzipien sind eine gute Anleitung und ja die Implementierung von Liste ist eine LSP Verletzung, kann aber nicht sein korrigiert werden. Seien Sie nur sehr vorsichtig mit der SRP, wenn Sie ein Muster dieser Art verwenden, und Sie sind wahrscheinlich sicher.