2008-11-09 2 views
5

Ich habe vor kurzem Rob Conery ausgezeichnete ASP.NET Storefront reference application heruntergeladen und finde es unglaublich lehrreich. Eine Frage, die Ihnen in den Sinn kommt, ist, wo Sie die Modellklassen (und die Datenklassen, von denen sie abhängen) platzieren sollten. Die MVC-Projektvorlage erstellt einen Modellordner. Aber es scheint mir, dass es besser wäre, das Modell in eine separate Projektzusammenstellung zu zerlegen, damit es von anderen potenziellen Anwendungen wiederverwendet werden kann (z. B. Management-Tools im Zusammenhang mit der Anwendungsdomäne der Website)?Best Practices für die Projektorganisation mit ASP.NET MVC

Ich bin neugierig, die Meinungen der Leute zu bekommen.

Antwort

7

Es hängt wirklich von der Größe des Projekts ab. Es gibt keinen eigenen Wert für eine separate Modellbaugruppe, da Sie ein Webanwendungsprojekt (einschließlich MVC-Projekten) testen können.

3

würde ich zustimmen. Wenn die Anwendung nicht immer die einzige Webanwendung ist, würde ich sie in ein separates Projekt aufteilen. In der Regel habe ich ein Webanwendungs-Frontend, das einen oder mehrere Windows-Dienste für wiederkehrende, automatisierte Aufgaben (Kostenübermittlung, Senden von Benachrichtigungen usw.) und ein oder mehrere Konsolenanwendungstools zur Bereitstellung der Anwendungsbenutzerbasis aus unserem Unternehmensverzeichnis verwendet. Meine Apps sind in der Regel Intranet-Apps, die möglicherweise nur für Teilmengen unserer gesamten Nutzergruppe gelten. Wenn ich die Modelle (Datenschicht) in einem separaten Projekt habe, kann ich sie problemlos mit allen anderen Anwendungen teilen.

1

Wenn es sich bei Modellen um Domänenübertragungsobjekte handelt, können Sie sie in einer separaten Assembly wiederverwenden. Wenn es sich bei Ihrer App um eine einfache MVC-App handelt, und das ist alles, was Sie tun müssen, oder Sie tun es nur für den Komponententest, wird es nicht benötigt. Andernfalls könnten Sie:

  • Haben Sie Web-Service-Schicht, die die Modelle Montage verwenden Sie die Modell-Objekte auf die mvc-App für den Einsatz in Ihrer Anwendung zu übergeben. Dies wäre erforderlich, wenn Sie nicht zulassen, dass Web-Apps direkten Zugriff auf die Datenbank haben. In diesem Fall verfügen Sie möglicherweise über einen MVC, der einen Webdienst aufruft, um die Daten zu authentifizieren und abzurufen.

  • Sie beabsichtigen andere Anwendungen zu erstellen, die dieselben Modelle verwenden, wie die von Ihnen erwähnten Verwaltungstools.

Ich hoffe, dass hilft. Nebenbei bemerkt, möchten Sie vielleicht Ihre "gemeinsamen" Teile in Ihr eigenes Framework einfügen, das "Modelle" (Entitäten, Domain-Objekte, wie auch immer Sie möchten) enthält.

-1

Separate Baugruppen! = Lose Kupplung.

+0

Aber Aufnahme in einem hilft nicht, nein? –

+0

Diese Antwort ist nicht auf die Frage des OP anwendbar. Dies hätte ein Kommentar zum OP sein sollen. –

2

Ich habe gerne separate Projekte für mein Modell, Datenzugriff und Geschäftslogik. Ich habe auch Schnittstellen in jeder Schicht. Dies macht Tests mit Mocks einfach zu implementieren, hält meinen Code organisiert und hält meine Controller leicht. Wenn ich alle Ebenen in den Modellordner legen würde, würde es sich für mich nicht organisiert genug anfühlen (nur eine Persönlichkeitssache). Ich möchte auch die Möglichkeit haben, Webdienste für meine Apps verfügbar zu machen, so dass alle diese Logik, Modelle und Datenzugriffe für diese Dienste verfügbar sind.

0

Manchmal kann es sinnvoll sein, einen Modellordner in Ihrem MVC-Website-Projekt zu haben UND ein separates Projekt zum Speichern von Datenmodellen zu haben. (Dies kann jedoch nur sinnvoll sein, wenn Sie eine ziemlich große Plattform haben, an der Sie mit anderen Projekten arbeiten, die gemeinsame Bibliotheken wiederverwenden).

Ein Beispiel sieht wie folgt aus:

Projekte:

  • Ablängen: enthält alle gängigen Schnittstellen für die Daten-Übertragung von Objekten, um zwischen anderen Diensten sowie sicherheitsrelevanten Operationen und Klassen

  • Business: Enthält Business-Layer-Objekte und -Operationen, steuert den Zugriff auf Operationen durch Sicherheitsanforderungen (Ein- und Ausgaben nur mit den CrossCutting-Schnittstellen).

  • Daten: Daten enthalten Modelle für Daten aus anderen Diensten/Datenbanken (verwendet von Business-Projekt)

  • WebAPI Zugriff: (MVC-Projekt) enthält einen Ordner Modelle. Einige Modellobjekte können Komposita der CrossCutting-Schnittstellen sein, um REST-fähige Weboperationen mit maximaler Effizienz zu unterstützen (also einen einzelnen HTTP-Aufruf an die Web-API, der jedoch zu mehreren BLL-Aufrufen führen kann).

Verwandte Themen