Читать книгу Prinzipien des Softwaredesigns - John Ousterhout - Страница 25
Flache Module
ОглавлениеIm Gegensatz dazu ist bei einem flachen Modul dessen Schnittstelle im Vergleich zur bereitgestellten Funktionalität recht komplex. Beispielsweise ist eine Klasse flach, die eine verkettete Liste implementiert. Es braucht nicht viel Code, um eine verkettete Liste zu implementieren (zum Einfügen oder Löschen eines Elements sind nur ein paar Zeilen Code notwendig), daher verbirgt die Abstraktion der verketteten Liste nicht sehr viele Details. Die Komplexität der Schnittstelle einer verketteten Liste ist fast so groß wie die Komplexität ihrer Implementierung. Flache Klassen lassen sich manchmal nicht vermeiden, und sie können auch immer noch ihre Berechtigung haben, aber sie sind beim Managen von Komplexität nicht sehr hilfreich.
Hier ein extremes Beispiel einer flachen Methode aus einem Projekt in einem Kurs zu Softwaredesign:
private void addNullValueForAttribute(String attribute) {
data.put(attribute, null);
}
Vom Aspekt der Komplexität aus betrachtet macht diese Methode die Dinge nur schlimmer. Sie bietet keine Abstraktion, da die gesamte Funktionalität durch ihre Schnittstelle sichtbar ist. Aufrufender Code muss beispielsweise vermutlich wissen, dass das Attribut in der Variablen data gespeichert wird. Es ist nicht einfacher, über die Schnittstelle nachzudenken als über die vollständige Implementierung. Ist die Methode sauber dokumentiert, wird die Dokumentation länger sein als der Code der Methode. Es erfordert sogar mehr Tippaufwand, um die Methode aufzurufen, also die Variable data direkt zu verändern. Die Methode sorgt für zusätzliche Komplexität (in Form einer neuen Schnittstelle, die Entwicklerinnen und Entwickler lernen müssen), bietet aber keinen Vorteil, der dies ausgleichen würde.
Warnzeichen: Flache Module Ein flaches Modul ist eines, dessen Schnittstelle im Verhältnis zur bereitgestellten Funktionalität relativ kompliziert ist. Flache Module helfen nicht sehr beim Kampf gegen Komplexität, weil ihr Vorteil (nicht lernen zu müssen, wie sie intern funktionieren) durch die Kosten für das Erlernen und Einsetzen ihrer Schnittstellen aufgezehrt wird. Kleine Module tendieren dazu, flach zu sein. |