Commit 311bd5a0 authored by andreas.fried's avatar andreas.fried

Add design lessons from the Odyssee.

parent 91961a0f
Pipeline #35846 passed with stage
in 58 seconds
......@@ -481,11 +481,21 @@ Paradoxe Anforderungen zeigen, dass gutes Design eine Kunst ist.
auch nur diese eine Klasse betrifft.
Allgemein sollte ein Klasse/Paket möglichst wenig interne Details
nach außen preisgeben.
\item Dazu gehört: Behalten Klassen ihre internen Datenstrukturen für sich?
Eine Klasse, die eine Liste von Objekten verwaltet,
sollte selbst Methoden zum Hinzufügen, Löschen, u.\,s.\,w.\ bereitstellen.
Sie sollte \emph{keine} veränderbare Referenz auf die Liste nach außen geben
und ihre Aufrufer die Liste verändern lassen.
Für Java siehe z.\,B.~\href{https://docs.oracle.com/javase/10/docs/api/java/util/Collection.html#unmodview}{Unmodifiable View Collections}.
\item Lose Koppelung zwischen Klassen/Paketen?
Abhängigkeiten zu fremden Schnittstellen
machen spätere Änderungen aufwendiger.
Im UML-Diagramm sollten möglichst wenig Verbindungen
zwischen Klassen zu sehen sein.
\item Keine indirekten Abhängigkeiten?
Wenn eine Abhängigkeit zwischen Objekten sein muss, soll sie direkt und explizit sein.
Sich stattdessen an Referenzen entlangzuhangeln sieht auf dem Papier aus wie lose Kopplung,
koppelt aber tatsächlich mehr Klassen enger aneinander.
Siehe auch \href{http://www.ccs.neu.edu/research/demeter/demeter-method/LawOfDemeter/general-formulation.html}{Law of Demeter}.
\item Starke Kohäsion innerhalb von Klasse/Paket?
Wenn Methoden einer Klasse eigentlich unabhängig voneinander sind,
......@@ -521,6 +531,12 @@ Paradoxe Anforderungen zeigen, dass gutes Design eine Kunst ist.
Das impliziert:
Eine Klasse/Paket/Methode sollte für sich verständlich sein,
ohne dass Kontext notwendig ist.
\item Sind Methoden frei von unerwarteten Nebeneffekten?
Eine Methode, die Informationen aus einem Objekt zurückgibt,
sollte nichts Wesentliches am Objektzustand verändern.
Auch eine Methode, die dazu dient, den Objektzustand zu verändern,
sollte nur eine überschaubare Änderung durchführen.
Siehe auch \href{https://en.wikipedia.org/wiki/Command%E2%80%93query_separation}{Command-query separation}
\end{itemize}
Ähnlich zu den üblichen Entwurfsmustern gibt es auch Anti-Entwurfsmuster.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment