2009-04-22 11 views
4

Ich habe derzeit ein Projekt, das ein 'Business Object' Projekt ist, und unser Ziel ist eine klare Trennung zwischen der GUI und den Business Objects. Allerdings hat mein Projekt einen Verweis auf System.Windows.Forms und das ist eine große rote Fahne für alle, dass mein Projekt schlecht entworfen ist.Wie kann ich die 'GUI' Schicht aus der 'Business Logic' Schicht heraushalten?

Mein Problem ist, dass ich ein Steuerelement von Drittanbietern namens "Active Query Builder" verwenden. Es ist buchstäblich ein "Control" wie in GUI, System.Windows.Forms.Control; Es wird jedoch nie irgendwo angezeigt, sondern zur Steuerelemente-Sammlung eines Formulars hinzugefügt. Und es bietet einen Großteil der Kernfunktionalität des Business-Objekts.

Wie auch immer, ohne die Bezugnahme auf System.Windows.Forms - Ich kann die 3rd-Party-Steuerung verwenden und die BO ist schrecklich gebrochen. Aber mir wurde gesagt, dass ich keinen Bezug zu System.Windows.Forms haben kann, weil es eine schlechte Programmierpraxis ist.

Und ich bin bei einem vollständigen Verlust für was zu tun.

Kann jemand mit mehr Design-Muster Erfahrung bieten eine Lösung?

Antwort

6

Sie haben also eine Bibliothek, die auf WindowsForms verweist, aber nichts direkt verwendet? Ihr BO-Projekt ist nicht mit irgendwelchen Formen herumzufummeln?

Ich denke, es geht Ihnen gut, die Referenz ist eine rote Fahne, die sagt, warum ich das mache. Aber solange die Schicht noch logisch getrennt ist dann IMHO dein ok.

Eine Sache, die Sie tun könnten, ist dies in ein anderes Projekt zu abstrahieren, das mit der Interaktion mit dem Abfrage-Generator umgehen würde. Ihr BO-Projekt würde also mit dem Query Builder-Projekt arbeiten, das dieses Steuerelement verwenden könnte.

+0

Das macht Sinn - danke. –

+0

würde gerne hören, warum ich ein -1 auf diesem wenn Sie wissen. Ich bin gespannt auf Ihre Meinung. – JoshBerke

3

kann ich mich irren hier aber System.Windows.Forms ist einfach Teil des .NET Framework und tatsächlich stellt keine GUI. Es kann viele nützliche Funktionen enthalten, die Sie möglicherweise verwenden, die nichts anzeigen. Ich denke, wer behauptet, dass dies nicht verwendet werden sollte, könnte das Prinzip missverstehen.

Wenn Sie eine n-Tier-Anwendung entwickeln, ist es üblich, GUI-Business Logic-Data Store-Trennung zu betreiben, aber die GUI ist ausschließlich die Benutzerschnittstelle, die Interaktion ermöglicht, nicht das Framework, das es erleichtert.

2

Ich bin mit Active Query Builder nur vage vertraut, aber ist das nicht eine GUI-Komponente, die zum Erstellen von SQL-Abfragen verwendet wird? Ich bin nicht in der Lage zu sehen, wie diese Art von Komponente in Business-Objekt überhaupt gehört.

+0

Ich kenne mich auch nicht aus, aber wenn es erlaubt, Abfragen zur Entwurfszeit zu erstellen, die dann die Komponente zur Laufzeit ausführen müssen, dann macht es Sinn, dass sie enthalten ist und dass sie Forms verwendet. – Lazarus

+0

Abgesehen von der GUI-Kontrolle, bietet es die Möglichkeit, SQL zu generieren und in der Regel einige ziemlich coole Sachen zu tun. Im Wesentlichen habe ich eine Reihe von "Kriterien" und möchte entweder die Daten zurückgeben, die übereinstimmen, oder das SQL, das benötigt wird, um diese Übereinstimmungen zu erhalten.Das AQB-Steuerelement ist das Herzstück davon - aber wir haben es ziemlich weit ausgebaut und möchten, dass andere BOs diese Funktionalität nutzen. –

+0

(Ich bin mir nicht sicher, ob das rechtfertigt, dass es im BO ist - vielleicht sollte es gar nicht da sein) –

1

Sie können eine Wrapper-Klasse für das Steuerelement erstellen, das eine Schnittstelle mit den von Ihnen benötigten Methoden implementiert. Ihr Business-Objekt kann eine Abhängigkeit von dieser Schnittstelle haben, die durch irgendetwas implementiert werden kann (in diesem Fall ist es ein Steuerelement).

Es wirft einige Bedenken auf, dass diese "Steuerung" Funktionalität unabhängig von der Benutzeroberfläche hat; es fühlt sich einfach falsch an.

Verwandte Themen