2011-01-03 5 views
1

Ich bin neu in MVC. Ich möchte meine Datenobjekte in einem separaten Projekt von meinem MVC-Hauptprojekt haben. Würde ich einfach ALLE Klassen und Dateien aus meinem Ordner "models" in mein neues all-Projekt verschieben und dann einen Verweis auf das neue Datenprojekt in meinem MVC-Projekt hinzufügen? Wie würde ich dann von den Modellen Gebrauch machen, sowohl in meinen Controllern (noch im MVC-Projekt) als auch in meinen Ansichten?MVC und separate Projekte

+0

Mh, können Sie ein bisschen genauer über Programmiersprache verwendet werden, verwendet Framework usw. Es hilft, sich vorzustellen, was Sie wollen. Wie Ihre Frage sagt, ich denke, man kann „einfach“ alles in dieser Reihenfolge erstellen (ich meine, Instancing): -Model (erfordert nicht alles) -Ansicht (erfordert ein Modell) -Controller (benötigt Modell und Ansicht) Dies ist einfach, ich meine, Sie können nur einen Zeiger auf Modelle und Ansichten im Konstruktor setzen –

+0

Entschuldigung. Mein Fehler. Ich nahm (fälschlicherweise) an, dass MVC eine Sache von Microsoft war. Das tut mir leid. Ich benutze .net (4.0) in Visual Studio 2010, mit C#. – Craig

+0

MVC ist ein Designmuster, ein Codierparadigma. ASP.NET MVC ist ein Toolset, das Microsoft zur Verfügung stellt. Ihr Tag wurde für Sie aktualisiert. :) – Sapph

Antwort

2

Sie gehen in die richtige Richtung. In der Tat, für alle außer den trivialsten Projekten, möchte ich mein Modell in einer separaten Klassenbibliothek haben. Und dann, wie Sie erwähnt haben, können Sie von Ihrem MVC-Projekt auf die Klassenbibliothek verweisen und Ihre Modellklassen verwenden. Sobald Sie Ihr Modell in einer Klassenbibliothek vorbereitet und optimiert haben, können Sie jede Art von Präsentationsebene wie Ihr MVC-Projekt oder Windows Phone 7 "freilegen" oder über WCF bereitstellen.

Bedenken Sie jedoch, dass Repositories NICHT Teil Ihres Modells sind. Sie sind ein beharrliches Anliegen und sie sollten die CRUD-Operationen nur einfach und einfach durchführen. Jede Art von Manipulation sollte in der Modellebene erfolgen.

0

Sie würden Bibliotheken mit den für Ihre Implementierungstechnologie geeigneten Tools erstellen. Zum Beispiel würden Sie mit Java Jars erstellen, die die Modelle enthalten. Du würdest die Gläser auf den Klassenpfad des jeweiligen Projekts stellen; Sobald Sie das tun, haben Sie Zugriff auf die Bibliothek.

Dies ist eine gute (großartige) Idee, wenn Sie die an mehreren Stellen implementierten Modellobjekte und Geschäftsanforderungen wiederverwenden möchten. Vielleicht möchten Sie, dass Kunden Ihre Modell-API verwenden, um beispielsweise ihre eigenen Arten von Clients zu implementieren.

Sie könnten den Modell-Layer als eigenes Projekt verwalten oder im Hauptprojekt behalten und Build-Prozesse ausführen, um die gewünschten Artefakte zu erzeugen. Sie haben uns nicht genügend Informationen gegeben, um eine harte Antwort zu geben, was der beste Ansatz ist.

Ich kann das sagen: Die meisten Projekte beginnen mit allen Schichten innerhalb des einen Projekts. Wenn ein Teil des Projekts erheblich komplexer wird, können Sie separate Projekte umgestalten - Bei einigen Projekten, die ich gesehen habe, ist der Webclient ausreichend komplex, um sein eigenes Projekt mit eigenem Entwicklungsteam (und seinen eigenen MVC-Schichten) zu sein. Bei anderen Projekten befanden sich die gesamten MVC-Stacks in einem Projekt. Beachten Sie, dass Sie das M in MVC nicht in einem separaten Projekt benötigen, um dem Paradigma zu folgen. Sie müssen nur alle Bedenken in der richtigen Ebene behandeln.

+0

Danke. Ich mache nur ein wirklich kleines Lernprojekt. Also im wirklichen Leben würde ich es als eins behalten. Ich möchte jedoch eine ältere Web-App in MVC konvertieren. Und das hat 2 Schnittstellen. Winforms und die Web-App. Ich benutze derzeit einen klassischen asp.net Webservice, der die bl und dl hat. Dies wird in ein Entity-Framework als Datenschicht konvertiert und der Webdienst verweist dann auf das ef-Projekt. Bin mir nicht sicher. Ich müsste dann wahrscheinlich eine gemeinsame Klassenbibliothek mit den Datenobjekten haben. Tatsächlich. Ich muss darüber nachdenken. – Craig