2009-08-17 11 views
5

Dieser Beitrag ist ähnlich zu in MVC/MVP/MVPC where do you put your business logic?, aber ich bin auf der Suche nach weiteren Details. Ich habe mir das Modell als den Ort gekauft, an dem sich die große Mehrheit der Geschäftslogik befinden sollte. Das Modell, so weit ich es verstehe, hat jedoch eine Menge zu bieten: Anwendungszustandsverwaltung, Datenpersistenz, Repositories, Datenübertragungsobjekte und möglicherweise andere Dinge.MVC/MVP/MVVM - Wie man Geschäftslogik organisiert

Ich habe eine Anwendung, die super komplexe Geschäftsregeln hat. Wenn der Benutzer versucht, eine bestimmte Aktion in einer Ansicht auszuführen, gibt es ungefähr 20 verschiedene Regeln, die überprüfen müssen, ob diese Aktion zulässig sein soll oder ob der Benutzer aufgefordert werden muss, zusätzliche Informationen einzugeben. Ich möchte diese Geschäftsregeln einzeln pro Methode kodieren, um Testbarkeit und Dokumentation zu unterstützen. Sollten diese Regeln in einer Repository-Klasse enthalten sein? Vielleicht in einer Services-Schicht über den Repositories? Was ist die beste Vorgehensweise, wenn ich bedenke, dass ich eine ORM-Lösung wie Linq zu SQL, EF oder nHibernate verwende?

Antwort

-2

Wenn sie Geschäftsregeln sind, würde ich sie in eine Datenbanktabelle legen, damit sie einfach zu ändern sind.

Der Code selbst ist dann Business-Regel dumm und kümmert sich nicht um den Inhalt der Regeln, nur die Struktur des Regel-Container.

In Bezug auf Ihre Kommentare unten, wenn Sie Ihren Ansatz zu einem code-zentrischen aus einem anderen Grund begrenzen müssen, ist das in Ordnung, es macht nur die Entwicklung des Projekts deutlich teurer.

Je komplexer die Regeln sind, desto mehr profitieren Sie davon, dass sie tabellengesteuert statt fest codiert sind. Der schwierige Teil kann mit einem Modell für die Regeln kommen, wenn Sie nicht daran gewöhnt sind. Nachdem das Modell gebaut wurde, ist die Entwicklung unkompliziert.

+0

ich die Antwort zu schätzen wissen, aber ich möchte in der Lage sein, diese Methoden mit NUnit oder einem anderen Test-Framework zu testen und setzen die Regeln in der Datenbank wird dies viel schwieriger machen. – Andy

+3

Mit der Komplexität dieser Regeln würde es extrem schwierig werden, sie alle in der Datenbank zu verwalten. – Andy

1

Erstens, vergessen Sie nicht, dass Sie in MVP die Möglichkeit haben, den Status in der Ansicht beizubehalten, so dass es im Modell eine weniger Sache gibt.

Es können sowohl Repository- als auch Service-Layer-Ansätze verwendet werden. Ich denke, ich wäre versucht, beides parallel mit ein paar Test-Apps zu erkunden. Während du gehst, wirst du wahrscheinlich das Gefühl haben, dass einer besser geeignet ist als der andere, und du dich dann auf den richtigen Ansatz konzentrieren kannst.

Das hört sich vielleicht nach verschwendeter Anstrengung an, aber es wird viel weniger als die Anstrengung sein, Ansätze zu wechseln, sobald die Entwicklung ernsthaft begonnen hat.

Verwandte Themen