2012-04-03 5 views
0

Ich habe eine Lösung in VS2010 mit mehreren Projekten, die jeweils eine Ebene innerhalb meiner Anwendung bilden. Ich habe Geschäftsentitäten, die momentan keine Methoden sind, und ich habe eine Verwaltungsebene, die auf die Ebene der Geschäftsentitäten im Projekt verweist. Ich denke jetzt, dass ich meine Anwendung schlecht entworfen habe und Methoden aus Hilfsklassen (die sich in einer anderen Schicht befinden) in Methoden verschieben möchte, die ich innerhalb der Geschäftseinheiten selbst erstellen werde.Wie kann ich meine Business-Objekt-Ebene dazu bringen, die Management-Ebene in ihren Methoden zu verwenden?

Zum Beispiel habe ich ein VirtualMachine-Objekt, das eine Hilfsklasse verwendet, um eine Reboot() - Methode darauf aufzurufen, die die Anforderung an die Management-Schicht übergibt. Die statische Manager-Klasse kommuniziert mit einer API, die die VM neu startet. Ich möchte das Reboot() -Methode in das Virtuelle Maschine Objekt bewegen, aber ich werde die Management-Ebene verweisen müssen:

public void Reboot() 
{ 
    VMManager.Reboot(this.Name); 
} 

Also, wenn ich einen Hinweis auf meine Management-Projekt in meiner Entitäten Projekt hinzuzufügen, erhalte ich die Kreis Abhängigkeitsfehler, so sollte es sein. Wie kann ich diese Situation klären? Muss ich noch eine weitere Ebene zwischen der Entitätsschicht und der Verwaltungsebene erstellen? Oder sollte ich es einfach vergessen und es so lassen wie es ist?

Die Anwendung funktioniert jetzt ok, aber ich bin besorgt, mein Design ist nicht besonders OOP centric und ich möchte dies korrigieren.

Antwort

1

Sie richtig sind, sollten Sie nicht zirkuläre Referenzen machen, könnte eine weitere Schicht macht nur helfen Sie vermeiden den zirkulären Referenzfehler, aber es wird immer noch eine zirkuläre Referenz sein, wenn ich Sie richtig verstanden habe.

Ich würde setzen, zeichnen Sie eine Karte und Methoden sollten nur in Schichten herunterrufen. Das ist die allgemeinste Methode am "unteren Ende" des Programms, und je spezialisierter Sie werden, desto weiter oben in der Hierarchie sollten Sie es setzen.

Die API des Programms, das Sie erstellen, sollte sich am Ende dieser Hierarchie befinden.

Sie müssen möglicherweise Ihr gesamtes Projekt nicht neu entwerfen. Aber es klingt, als könnten Sie sich selbst bei der Visualisierung der Struktur helfen.

0

Verwaltungsschicht (wie es die Arbeit macht) scheint nicht auf der Oberseite der Business-Schicht zu passen. Und eigentlich haben wir keine solche Schicht über Business-Ebene, wir haben nur Fassadenschicht an der Spitze der Business-Schicht - das ist nicht das Gleiche wie das, was Sie brauchen.

Von dem, was ich in Ihrem Projekt sehen können, müssen Sie die Business-Schicht Dienste der Hilfsklasse zu verwenden:

// Business layer 
public class VirtualMachineManager 
{ 
    IRebooter _rebooter; 
    public class(IRebooter rebooter) 
    { 
     _rebooter = rebooter; 
    } 
} 

// helper class 
public class Rebooter : IRebooter 
{ 
    .... 
}