In einem objektorientierten Programm: Wie viel Abstraktion ist zu viel? Wie viel ist genau richtig?
Ich war schon immer ein verrückter Typ. Ich verstand das Konzept hinter einem hohen Maß an Kapselung und Abstraktion, hatte aber immer instinktiv das Gefühl, dass zu viel Hinzufügen das Programm nur verwirren würde.
Ich habe immer versucht, nach einer Menge Abstraktion zu suchen, die keine leeren Klassen oder Ebenen hinterlässt. Und wo im Zweifel, anstatt der Hierarchie eine neue Ebene hinzuzufügen, würde ich versuchen, etwas in die vorhandenen Ebenen einzupassen.
In letzter Zeit bin ich jedoch auf stärker abstrahierte Systeme gestoßen. Systeme, bei denen alles, was später in der Hierarchie eine Darstellung erfordern könnte, eine im Voraus erhält. Dies führt zu vielen leeren Schichten, was auf den ersten Blick als schlechtes Design erscheint. Beim zweiten Gedanken wurde mir jedoch klar, dass das Verlassen dieser leeren Ebenen Ihnen in Zukunft mehr Orte bietet, an denen Sie sich ohne viel Umgestaltung einhaken können. Sie haben die Möglichkeit, neue Funktionen zusätzlich zu den alten hinzuzufügen, ohne fast genauso viel Arbeit für die Anpassung der alten zu leisten.
Die beiden Risiken scheinen darin zu bestehen, dass Sie die Schichten, die Sie benötigen, falsch machen könnten. In diesem Fall müsste man immer noch ein umfangreiches Refactoring durchführen, um den Code zu erweitern, und hätte immer noch eine Menge nie verwendeter Ebenen. Aber je nachdem, wie viel Zeit Sie damit verbringen, die ersten Abstraktionen zu erstellen, die Möglichkeit, sie zu vermasseln, und die Zeit, die später gespart werden könnte, wenn Sie es richtig machen, lohnt es sich möglicherweise immer noch, es zu versuchen.
Das andere Risiko, an das ich denken kann, ist das Risiko, es zu übertreiben und niemals alle zusätzlichen Schichten zu benötigen. Aber ist das wirklich so schlimm? Sind zusätzliche Klassenebenen wirklich so teuer, dass es ein großer Verlust ist, wenn sie nie verwendet werden? Der größte Aufwand und Verlust wäre hier die Zeit, die im Vorfeld der Schichten verloren geht. Ein Großteil dieser Zeit könnte jedoch später noch gespart werden, wenn man mit dem abstrahierten Code arbeiten kann, anstatt mit Code auf niedrigerer Ebene.
Wann ist es zu viel? Ab wann werden die leeren Ebenen und zusätzlichen "möglicherweise benötigten" Abstraktionen übertrieben? Wie wenig ist zu wenig? Wo ist der Sweet Spot?
Gibt es verlässliche Faustregeln, die Sie im Laufe Ihrer Karriere gefunden haben und die Ihnen helfen, den Umfang der erforderlichen Abstraktion zu beurteilen?