Wie jemand sagte mir vor langer Zeit:
-Code Refactoring ist nicht eine Frage von zufällig Code um zu bewegen.
In Ihrem Beispiel, das ist genau das, was Sie tun: Code in einer anderen Datei zu bewegen
Warum ist es schlecht?
Indem Sie Code auf diese Weise verschieben, machen Sie Ihre ursprüngliche Klasse komplizierter, da die Logik zufällig in mehrere andere Klassen aufgeteilt wird. Natürlich sieht es besser aus, weniger Code in einer Datei ist optisch besser, aber das ist alles.
Bevorzugt Zusammensetzung bis Vererbung. Die Verwendung von Mixins wie dieser verlangt, dass man einen unordentlichen Raum "säubert", indem man den Kram in sechs separate Schubladen wirft und sie zuschlägt. Sicher, es sieht an der Oberfläche sauberer aus, aber die Junk-Drawers machen es tatsächlich schwieriger, die Zerlegungen und Extraktionen zu identifizieren und zu implementieren, die notwendig sind, um das Domänenmodell zu klären.
Was soll ich dann tun?
Sie sollten sich fragen:
- Welcher Code geht zusammen und könnten Teil einer neuen Klasse/Modul sein?
- Wo ist es sinnvoll, Code an anderer Stelle zu extrahieren?
- Gibt es einen Code, der in meiner Anwendung geteilt wird?
- Kann ich wiederkehrende Muster in meiner Codebasis extrahieren?
Extract Serviceobjekt
ich für Service erreichen Objekte, wenn eine Aktion eine oder mehrere dieser Kriterien erfüllt:
- Die Aktion ist komplex
- Die Aktion über mehrere Modelle erreicht
- Die Aktion interagiert mit einem externen Dienst
- Die Aktion ist nicht ein zentrales Anliegen des zugrunde liegenden Modells
- Es gibt mehr Möglichkeiten der Durchführung die Aktion
Extract Formularobjekte
Wenn mehrere Modelle können durch aa einziges Formular Vorlage aktualisiert werden, Vielleicht möchten Sie ein Formularobjekt erstellen.
Dies ermöglicht es, die gesamte Formularlogik (Namenskonventionen, Validierungen usw.) an eine Stelle zu setzen.
Extract Query-Objekte
Sie sollten komplexen SQL/NoSQL-Abfragen in ihre eigene Klasse extrahieren. Jedes Query-Objekt ist verantwortlich für die Rückgabe eines Ergebnissatzes basierend auf den Kriterien/Geschäftsregeln.
Extract Vorführer/Zierer
Extract Ansichten Logik in Moderatoren. Ihr Modell sollte sich nicht mit der Logik spezifischer Ansichten befassen. Darüber hinaus können Sie Ihren Moderator in mehreren Ansichten verwenden.
More on decorators
Dank this Blog-Post zu mir helfen, diese zusammenzusetzen.
diese Art der Trennung ist völlig sinnlos. Wenn Sie ein Modell dekonstruieren müssen, gehen Sie auf Bedenken ein. – sevenseacat
@sevenseacat, können Sie erklären, warum es sinnlos ist? –
weil es bedeutet, dass Sie eine Klasse ohne Grund in mehrere Dateien aufteilen.Sie machen das Modell dadurch nicht dünner, Sie machen die Codebasis nur komplizierter. – sevenseacat