Frage

eine hypothetische Situation bedenkt, wo eine alte, Legacy-Darstellungsbibliothek ist über die Jahre beibehalten worden, und hat sich allmählich mehr und mehr Business-Logik hatte codiert in sie durch einen Prozess der übereilten Korrekturen und Mangel an geeigneten architektonischen Aufsicht. Alternativ sollten Sie eine Business-Klasse oder Namespace, der nicht von der Darstellung durch Montage Grenzen getrennt ist, und war somit in der Lage Referenzierung etwas wie System.Windows.Forms ohne einen Verweis hinzuzufügen, gezwungen zu sein (eine viel ernüchternde Wirkung als eine einfache Verwendung Klausel) .

In Situationen wie diesen, ist es nicht unvorstellbar, dass das Geschäft Code dieses UI-Code verwendet wird schließlich auf zur Wiederverwendung aufgerufen werden. Was ist ein guter Weg, um die beiden Schichten Refactoring auseinander für dies zulassen?

Ich bin locker vertraut mit Design Patterns - zumindest im Prinzip sowieso. Allerdings habe ich nicht eine ganze Menge praktische Erfahrung haben, damit ich etwas unsicher, meine Intuitionen bin. Ich habe auf dem Weg der Verwendung der Strategie-Muster für diese gestartet. Die Idee ist, die Orte zu identifizieren, wo die Business-Logik zu UI-Komponenten ruft die Benutzer eine Frage zu stellen und Daten sammeln, und dann diejenigen, in eine Reihe von Schnittstellen zu verkapseln. Jede Methode auf dieser Schnittstelle wird die UI orientierten Code aus dem ursprünglichen Workflow enthält, und die UI-Klasse wird dann diese Schnittstelle implementieren.

Der neue Code, der die Business-Logik in Frage wiederverwenden will, wird auch diese Schnittstelle implementieren, sondern ersetzen entweder neue Fenster oder möglicherweise Pre-Fab oder parametrisierte Antworten auf die Fragen ursprünglich von den UI-Komponenten beantwortet. Auf diese Weise kann die biz-Logik als eine reale Bibliothek behandelt werden, wenn auch mit einer etwas umständlich Schnittstellenparameter an einige seiner Methoden übergeben.

Ist das ein anständiger Ansatz? Wie besser sollte ich über diese gehen? Ich werde auf Ihre kollektive Internet Weisheit verschieben.

Danke!

War es hilfreich?

Lösung

Sie scheinen einen guten Ansatz zu nehmen, in dem Sie Abhängigkeiten zwischen den Betonelementen in Ihrem Design brechen, stattdessen hängt von Abstraktionen (Schnittstellen). Wenn Sie Abhängigkeiten wie diese brechen, sollten Sie sofort mit Unit-Tests starten Sie Ihre Legacy-Code-Basis zu decken und das Design mit verbesserter Sicherheit zu entwickeln.

Ich habe das Buch Arbeiten effektiv gefunden mit Legacy-Code in diesen Situationen von unschätzbarem Wert zu sein. Auch nicht direkt in die Muster springen, ohne zunächst die Prinzipien des objektorientierten Designs zu suchen, wie die SOLID Prinzipien. Sie führen oft Ihre Wahl von Mustern und Entscheidungen über die Entwicklung des Systems.

Andere Tipps

Ich schlage vor, demütig Model-View -Controller - MVC hat eine hohe Wahrscheinlichkeit als eine erfolgreiche Lösung für Ihr Problem. Er trennt verschiedene Logik, so wie Sie beschreiben.

alt text

HTH

Ich würde es nähern, indem eindeutig die Entitäten zu identifizieren und die Aktionen, die sie tun können, oder können sie durchgeführt werden. Dann, eines durch einen Versuch starten unabhängige Business-Logik-Objekte zu schaffen für diejenigen, Refactoring die Logik aus der Benutzeroberfläche, so dass der UI-Aufruf an dem BL-Objekten.

An diesem Punkt, wenn ich Ihr Szenario richtig verstehen würden Sie eine Hand voll von BL-Objekten, ein Teil davon made Formen Anrufe gewinnen, die Win-Formen Anrufe müßten in die UI-Ebene gefördert werden wird.

Dann wie JustBoo sagt, glaube ich Ihnen eine deutlich genug Situation abstrahieren anfangen würden Controller von Ihrem BL und UI und machen es alle Funktion in einem MVC-Design.

Okay, angesichts Ihrer verschiedenen Kommentaren, würde ich Herrn Hoffa Rat nehmen und sie erweitern. Ich bin sicher, Sie haben gehört, sollten harte Probleme auf in immer kleinere Einheiten der Arbeit unterbrochen werden, bis sie können „erobert.“

Unter Verwendung dieser Technik in Verbindung mit den Methoden der Refactoring könnte Ihre Probleme lösen. Es gibt ein Buch und viele Informationen im Internet über sie. Sie haben nun einen Link. Die Seite hat eine Tonne von Links zu Informationen.

Eine weitere Verbindung von dem Autor des Buchs.

Also, Umgestalten Sie langsam aber sicher auf die cremige Güte von MVC, Schritt-für-Schritt.

HTH

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top