Die Konzepte im Video Die Prinzipien sauberer Architektur von Onkel Bob Martin haben mir sehr gut gefallen. Aber ich denke, dieses Muster ist wie eine Kombination aus Abstract Factory- und Builder-Mustern im Kern.
Nicht annähernd.
Wenn du dir das anschaust:

Sie betrachten das Design eines Objektgraphen. Dies bestimmt, was über was weiß. Was in dieser Geschichte fehlt, ist, wie dieser Objektgraph aufgebaut wurde. Sorry, aber das findest du hier nicht. Bauarbeiten werden nicht erwähnt.
Sie können dies alles ohne abstrakte Fabriken und Erbauer aufbauen. Ich weiß, weil ich es getan habe . Ich wollte ihnen nicht einmal ausweichen. Ich liebe sie. Ich habe sie einfach nicht gebraucht. Ich habe gerade Referenzübergabe verwendet. Abhängigkeitsinjektion ist der schicke Begriff dafür.
Tatsächlich könnte ich alles, was Sie in diesem Diagramm sehen, in main aufbauen. Rufen Sie dann einfach eine Methode für ein Objekt auf, um das Ticken des Ganzen zu starten.
Jetzt müssen Dinge existieren, bevor Sie sie in andere Dinge hineinschieben können. Ich habe das hier untersucht und ihm dieses süße kleine Diagramm gegeben:

Und Sie können all das bauen, ohne auch nur zu gehen main().
Ich würde die Verwendung von Bauherren und Fabriken empfehlen, wenn Sie einen Stapel prozeduralen Konstruktionscodes in schöne, mundgerechte konzeptionelle Stücke aufteilen möchten. Aber es gibt nichts in sauberer Architektur oder in einer der anderen Modewortarchitekturen, das Sie dazu auffordern würde. Also, wenn Sie bleiben wollen main(), gut. Bitte erbarme dich .
Ist „Clean Architecture“ von Bob Martin eine Faustregel für alle Architekturen oder nur eine der Optionen?
Ich betrachte Clean Architecture als ein Schlagwort, mit dem Menschen zu einem Blog und einem Buch geführt werden. In diesem Blog und in diesem Buch finden sich sehr gute Erklärungen für sehr ähnliche ältere Architekturen mit älteren Namen, mit denen Menschen zu älteren Blogs und älteren Büchern geführt werden. Speziell Zwiebel sowie Ports und Adapter. Keine davon sind die einzigen architektonischen Optionen, die Sie haben.
Ich mag Onkel Bob, weil er ein großartiger Redner und Autor ist. Er lässt mich an Dinge denken, die ich sonst nicht hätte. Aber wenn Sie sich dadurch in einen religiösen Fanatiker verwandeln lassen, der darauf besteht, dass alles auf seine Weise getan werden muss, werden Sie schnell feststellen, dass die Aktualisierung der Dokumentation der nächste ist, mit dem Sie meinen Code erreichen können.
Die Modewortarchitekturen sind nützlich, wenn Sie langlebigen Code haben, der beibehalten werden muss, während sich die Welt um ihn herum ändert. Das ist, wenn es scheint. Wenn die Welt im Vergleich zum Code stabil ist, dann macht man die Dinge ohne guten Grund ausgefallen.
Egal wie großartig etwas scheint, es gibt einen Kontext, in den man es einfügen kann, der es absurd macht. Sorry, das ist auch keine Wunderkugel.
Im Video ist er jedoch der Meinung, dass eine saubere Architektur eine klare Grenze zwischen Geschäftslogik und Frameworks aufweisen sollte. Frameworks (Web, Android usw.) sollten Plugins sein, die sich in die Geschäftslogik einfügen. Er verspottet sogar subtil die Schienen im Video.
Du hast recht. Er tut. Onkel Bob ist der Ansicht, dass Frameworks wie Bibliotheken behandelt werden können. Und sie können. Aber selbst diese Entscheidung kostet dich etwas.
Was Herr Martin zu bewahren versucht, ist ein Raum, in dem Ihre allgemeine Sprache noch allgemein ist. Sie geben das auf, wenn Sie überall einen Rahmen verbreiten. Wenn Sie dies tun, gehen Sie den Weg, Ihre Sprache in eine domänenspezifische Sprache zu verwandeln. HTML ist eine domänenspezifische Sprache. Es macht seinen Job sehr gut, aber es gibt andere Jobs, die es überhaupt nicht machen kann.
Solange Ihre Bedürfnisse durch das Framework vorweggenommen werden, wird alles reibungslos verlaufen. Es ist schön, Ihre Bedürfnisse vorwegzunehmen. Es bringt Sie in eine Box, die die Dinge einfach hält. Verstehe einfach, was du aufgibst, um das zu bekommen. Wenn Sie Spring überall verbreiten, können Sie es nicht mehr als Java-Job bewerben. Es ist ein Java / Spring-Job. Ich könnte dasselbe über Ruby und Rails sagen, aber Rails hat vor langer Zeit Rubys Mittagessen gegessen.