Eine vorzeitige Einführung von Komplexität durch Implementierung von Entwurfsmustern, bevor sie benötigt werden, ist keine gute Praxis.
Wenn Sie jedoch alle (oder sogar die meisten) SOLID-Prinzipien befolgen und gemeinsame Entwurfsmuster verwenden, werden Sie einige Komplexität einführen, wenn Funktionen und Anforderungen hinzugefügt oder geändert werden, um Ihren Entwurf so wartbar und flexibel wie nötig zu halten.
Sobald diese Komplexität eingeführt ist und wie ein Champion funktioniert, wann haben Sie sie entfernt?
Beispiel. Ich habe eine Bewerbung für einen Kunden geschrieben. Wenn ursprünglich dort erstellt, wo mehrere Möglichkeiten, Mitarbeiter zu erhöhen geben. Ich habe das Strategiemuster und die Fabrik benutzt, um den gesamten Prozess schön und sauber zu halten. Im Laufe der Zeit wurden bestimmte Erhöhungsmethoden vom Anwendungseigner hinzugefügt oder entfernt.
Die Zeit vergeht und ein neuer Besitzer übernimmt. Dieser neue Besitzer hat eine harte Nase, hält alles einfach und hat nur einen einzigen Weg, um eine Gehaltserhöhung zu geben.
Die Komplexität, die das Strategiemuster benötigt, wird nicht mehr benötigt. Wenn ich dies aus den Anforderungen, wie sie jetzt vorliegen, heraus codieren würde, würde ich diese zusätzliche Komplexität nicht einführen (aber sicherstellen, dass ich sie mit geringem oder keinem Aufwand einführen könnte, falls dies erforderlich sein sollte).
Entferne ich jetzt die Strategieimplementierung? Ich glaube nicht, dass dieser neue Besitzer jemals ändern wird, wie Erhöhungen gegeben werden. Die Anwendung selbst hat jedoch gezeigt, dass dies passieren kann.
Dies ist natürlich nur ein Beispiel für eine Anwendung, bei der ein neuer Eigentümer viele Prozesse übernimmt und vereinfacht. Ich könnte Dutzende von Klassen, Schnittstellen und Fabriken entfernen und die gesamte Anwendung viel einfacher machen. Beachten Sie, dass die aktuelle Implementierung einwandfrei funktioniert und der Eigentümer damit zufrieden ist (und überrascht und noch glücklicher, dass ich ihre Änderungen aufgrund der diskutierten Komplexität so schnell implementieren konnte).
Ich gebe zu, dass ein kleiner Teil dieses Zweifels darauf zurückzuführen ist, dass der neue Eigentümer mich höchstwahrscheinlich nicht mehr benutzen wird. Es ist mir eigentlich egal, dass jemand anderes dies übernimmt, da es kein großer Einkommensgenerator war.
Aber ich kümmere mich um 2 (verwandte) Dinge
Es ist mir ein bisschen wichtig, dass der neue Betreuer beim Versuch, den Code zu verstehen, etwas genauer nachdenken muss. Komplexität ist Komplexität und ich möchte den Psycho-Maniac, der hinter mir her ist, nicht verärgern.
Umso mehr mache ich mir Sorgen, dass ein Konkurrent diese Komplexität sieht und denkt, ich implementiere nur Entwurfsmuster, um meine Arbeitsstunden aufzufüllen. Dann dieses Gerücht verbreiten, um mein anderes Geschäft zu verletzen. (Ich habe dies erwähnt gehört.)
So...
Sollte die zuvor benötigte Komplexität im Allgemeinen entfernt werden, obwohl sie funktioniert, und es gab einen historisch nachgewiesenen Bedarf für die Komplexität, aber Sie haben keinen Hinweis darauf, dass sie in Zukunft benötigt wird?
Auch wenn die obige Frage im Allgemeinen mit "Nein" beantwortet wird, ist es ratsam, diese "unnötige" Komplexität zu beseitigen, wenn das Projekt an einen Konkurrenten (oder einen Fremden) übergeben wird?