Frage

In einem kürzlich erschienenen Projekt, das ich fast abgeschlossen hat, haben wir eine Architektur, die als oberste Schicht der Interaktion von der Bahn / service Schichten XXXManager Klassen verwendet.

Zum Beispiel gibt es einen Windows-Dienste, die auf einem Zeitplan ausgeführt wird, dass die Einfuhren von Daten aus mehreren verschiedenen Datenquellen in unser System. Innerhalb dieses Service werden mehrere "Manager" genannt Klassen heißt CPImportScheduleManager, CPImportProcessManager etc ..

Nun ist diese Manager-Klassen tun viel mehr als nur Methode, um die Kette für den Einsatz in Web- / Service-Layer zu verzichten. Zum Beispiel meine UserManager.Register () -Methode bleibt nicht nur den Benutzer über untere Ebene Baugruppen aber auch einen WAP-Push an den Benutzer senden und bestimmt das Mobiltelefon verwendet etc.

Es wurde mir vorgeschlagen, dass diese Art von Architektur ich ein gängiges Mittel zu versuchen, OOP passen in ein Vorgehensmodell zu erhalten. Ich kann ihre Stelle hier sehen, aber was ich frage mich, ist mit diesem Top-Level-Satz von Klassen jede Web / Service-Schicht kann einfach die gleiche gemeinsame Methode aufrufen, ohne Code neu schreiben zu müssen. Also wenn ich irgendwann einen Web-Service, die einen Benutzer registrierte Ich kann wieder nur rufen Sie den UserManager.Register () -Methode, ohne neu zu schreiben, die gesamte Logik wieder schreiben wollte.

Ich habe noch nie die beste Person zu erklären mir, aber wenn mein Geschwafel Sinn machen, wenden Sie sich bitte an Ihre Alternativen zu beraten.

Cheers, Chris.

War es hilfreich?

Lösung

Manager sind eine häufig überstrapaziert Namensgebung Strategie für Dienste, die den Workflow oder komplexe Aufgaben für einen bestimmten Satz von Einheiten handhaben. Allerdings, wenn es die Arbeit erledigt wird, dann ist es nicht unbedingt eine schlechte Sache.

Die wichtige Frage, die ich habe ist, was unter den Managern ist da los? Wenn sie einfach den Workflow eines Prozesses, wie die Registrierung eines Benutzers abgestimmt sind, dann sind sie Controller (MVC) mit einem anderen Namen. Wenn sie jedoch eine Menge Business-Logik sind, die (damit meine ich bedingte Logik in Abhängigkeit vom Zustand eines Unternehmens oder einer Gruppe von Einheiten), dann würde ich einen vorsichtigen Blick zu sehen, ob Sie diese Logik explizit machen, indem sie es macht seine eigene Klasse oder in die Klasse mit der richtigen Verantwortung zu bewegen.

Update: Vom Klang von ihm haben Sie richtige Idee im Allgemeinen. Sie haben eine Reihe von Klassen, die die Koordination Ihrer Geschäftsprozesse behandeln, egal, ob sie von einem WebService verwendet werden, ein Webformular oder was auch immer. Dann sagen Sie Sie Ihre WebService Schicht hinzufügen möchten auf dieses und diese Klassen zu nutzen. Dies ist eine gute Sache (tm).

Andere Tipps

Klingt wie Ihre Motivation für diesen Entwurf war gut - Wiederverwendung von Code. In gewisser Hinsicht ist es ähnlich in Motivation Martin Fowler Service Layer . Sie können jedoch zu viele Aufgaben in diese Manager-Klassen werden häufen. Vielleicht getrennte Infrastruktur betrifft (WAP-Push, Benutzer Persistenz) von Domain-Bedenken (Benutzerregistrierung). Dieses Separation of Concerns würde reusablity weiter erhöhen und auch die Wartbarkeit verbessern.

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