David West schlug in seinem Buch Object Thinking (Kapitel 10, Abschnitt 1, Unterabschnitt 2) vor, dass in einer idealen OO-Umgebung jedes Objekt in der Lage sein sollte, sich auf Anfrage zu präsentieren. sei es für Menschen (als GUI), nicht native Komponenten (als JSON und / oder XML) oder andere interessierte Parteien:
Objektdenken besagt, dass eine Ansicht (manchmal als Schnittstelle bezeichnet) - grafisch oder auf andere Weise - ein Mittel für ein Objekt ist, um mit einem anderen Objekt zu kommunizieren, und nicht mehr. Die Notwendigkeit einer Ansicht entsteht, wenn sich ein Objekt einem anderen Objekt (normalerweise einem Menschen) oder einer Anwendung (z. B. einer XML-Ansicht für Datenobjekte, die plattformübergreifend gemeinsam genutzt werden) in einer „nicht nativen“ Form präsentieren muss.
Die Ermittlung des Bedarfs und der Parameter, die von einer Ansicht erfüllt werden müssen, zeigt sich in den Szenarien, an denen das Objekt teilnimmt. Wenn ein Objekt aufgefordert wird, sich selbst anzuzeigen, muss es eine Ansicht verwenden - eine Darstellung -, die für den Absender dieser Anzeigemeldung geeignet ist. Wenn beispielsweise ein Objekt versucht, sich selbst zu instanziieren (einen Wert für sich selbst zu erhalten), muss es einem Menschen (oder einem anderen dienstleistenden Objekt) eine Ansicht von sich selbst als implizite Anforderung für einen Wert präsentieren. Wenn wir eine GUI erstellen, die als Vermittler zwischen einem Softwareobjekt und einem menschlichen Objekt dient, verwenden wir Glyphen für Anzeigezwecke und Widgets für Interaktionszwecke.
Aber welche Glyphen und Widgets müssen in die GUI aufgenommen werden? Nur diejenigen, die erforderlich sind, um das Szenario oder die Szenarien 4 von unmittelbarem Interesse abzuschließen, während die Anwendung ausgeführt wird. Diese Perspektive ist für die meisten Entwickler nicht intuitiv, da sie vorschlägt, eine GUI aus der Anwendung heraus zu definieren.
Betrachten Sie als Beispiel eine Brauerei. Auf der einen Seite stehen mit Bier gefüllte Bottiche. An der komplexen Produktionslinie bestehend aus Flaschenwaschanlagen, Füllstationen, Verschließmaschinen und Verpackungsmonteuren. Darüber hinaus gibt es eine Kontrollstation, die die Brauerei überwacht und menschliche Manager über Status und Probleme informiert. Traditionelle Entwickler beginnen wahrscheinlich mit der Analyse und dem Entwurf eines „Brauereimanagementsystems“ aus Sicht des Control Panels. Dies ist analog zum Entwerfen über die Schnittstelle in.
Objektdenken würde stattdessen darauf hindeuten, dass Sie überlegen, welches Objekt der Hauptkunde der Brauerei und all ihrer unzähligen Maschinen ist. In wessen Auftrag existiert das komplexe Labyrinth der Ausrüstung? Die richtige Geschäftsantwort lautet natürlich "Der Kunde". Eine Antwort, die das Denken von Objekten besser widerspiegelt, lautet: „Das Bier.“ Alle Szenarien werden aus der Perspektive des Bieres geschrieben und versuchen, sich in eine Flasche mit einem Verschluss zu packen, der in einem Paket platziert ist und in einem Lastwagen wohnt. Das Bedienfeld ist ein passiver Beobachter 5 des Zustands der Brauerei. Wenn das Bier irgendwann auf ein Problem stößt, liegt es in der Verantwortung des Bieres, die Intervention der menschlichen Bediener anzufordern, indem eine Nachricht an das Bedienfeld (oder an maschinenspezifische Bedienfelder) gesendet wird, in der ein Interventionsdienst angefordert wird.
Diese Perspektive vereinfacht das GUI-Design und beseitigt, was noch wichtiger ist, die Vielzahl von Manager- und Controller-Objekten, die beim Entwerfen aus der Perspektive des Control Panels (GUI) unvermeidlich auftreten.
Von einem Anfänger in der OO-Welt kommend: Sollte das wirklich der Fall sein?
Objekte zu haben, die wissen, wie man sich selbst darstellt, könnte sicherlich die Anzahl der Controller- / Manager-Objekte verringern, die West in seinem Buch wiederholt sagte, ein Objektdenker sollte angeblich versuchen, dies um jeden Preis zu vermeiden. Aber wird die Einhaltung dieser "Regel" nicht gegen SRP verstoßen ?
Auch (wenn sich herausstellt, dass dies der Fall ist), bei einer typischen Implementierung beispielsweise in einer Android-Anwendung: Wie kann man diese Art von Ziel erreichen? Sollte jedes Objekt, das wir erstellen, wissen, wie man sich als präsentiert View
?