2008-09-22 8 views
7

Ich beginne ein neues ASP.NET MVC-Projekt zu lernen, und frage mich, was ist der optimale Weg, um das Projekt (s) zu einem SQL-Server für die Daten zu verbinden. Nehmen wir zum Beispiel an, dass wir eine Produkttabelle und ein Produktobjekt haben, das ich verwenden möchte, um Daten in meiner Ansicht zu füllen.Wie kann der Datenzugriff für ein ASP.NET MVC-Projekt am besten eingerichtet werden?

Ich weiß, irgendwo hier in Ich sollte eine Schnittstelle, die implementiert wird, usw., aber ich kann meine Gedanken nicht drum herum wickelt heute :-(

EDIT: Gerade jetzt (dh: die aktuelle, schlecht codierte Version dieser App) benutze ich einfach nur alte SQL - Server (2000 sogar) nur mit gespeicherten Prozeduren für den Datenzugriff, aber ich wäre nicht ungünstig, eine zusätzliche Schicht von Flexibilität für die Verwendung von LINQ zu SQL oder etwas hinzuzufügen.

EDIT # 2: Eine Sache, die ich hinzufügen wollte, war diese: Ich werde dies gegen eine V1 der Datenbank schreiben, und ich muss in der Lage sein, unseren DBA die Datenbank neu arbeiten zu lassen und mir später eine V2 zu geben wäre schön, nur ein paar s wirklich ändern zu müssen Mall Dinge, die nicht über die Datenbank zur Verfügung gestellt werden, die später sein wird. Anstatt eine ganze neue DAL neu schreiben zu müssen.

Antwort

1

In der Lösung meiner Website habe ich das MVC-Webanwendungsprojekt und ein "gemeinsames" Projekt, das meine POCOs (einfache C# -Objekte), Business-Manager und Datenzugriffsschichten enthält.

Die DAL-Klassen sind an SQL Server gebunden (ich habe sie nicht abstrahiert) und geben POCOs an die Business-Manager zurück, die ich von meinen Controllern im MVC-Projekt aus anrufe.

+0

ich einige der Frage vielleicht denke, ich bin versucht, ein Verständnis zu erhalten, ist, was der Unterschied VS zwischen den Objekten in den gemeinsamen Projekten wäre Objekte, die in den Modellordner gehen sollen? Oder ersetzt dieses gemeinsame Projekt Füllmaterial in Modelle? –

+0

Ich könnte völlig falsch sein (ich bin neu in MVC), aber ich würde den Ordner Modelle verwenden, um Mash-ups meiner "gemeinsamen" Objekte für die Ansicht spezifische Verwendung zu erstellen. –

+0

Sie würden also Ihre allgemeinen Objekte im Ordner "Modelle" grundsätzlich erweitern, wenn sie etwas tun müssten, das nicht in Ihrem grundlegenden gemeinsamen Objekt enthalten ist? –

4

Es hängt wirklich davon ab, welche Datenzugriffstechnologie Sie verwenden. Wenn Sie Linq To Sql verwenden, möchten Sie möglicherweise den Datenzugriff hinter einer Art von Repository-Schnittstelle wie einem IProductRepository abstrahieren. Der Hauptanreiz dafür ist, dass Sie die spezifische Datenzugriffsimplementierung jederzeit ändern können (z. B. beim Schreiben von Komponententests).

Ich habe versucht, einige this here zu decken:

+0

Kann diesen Link nicht öffnen .... ist Ihre Seite nicht erreichbar? –

3

ich auf seine Schaffung eines MVC Storefront Rob Conery's Videos überprüfen würde. Die Serie kann hier gefunden werden: MVC Store Front Series

Diese Serie taucht in alle Arten von Design-Themen sowie Codierung/Testpraktiken für die Verwendung mit MVC und anderen Projekten.

0

Für unsere Anwendung plane ich die Verwendung von LINQ to Entities, aber da es neu für mich ist, gibt es die Möglichkeit, dass ich dies in Zukunft ersetzen möchte, wenn es nicht so funktioniert, wie ich es gerne hätte LINQ to SQL oder NHibernate, so abstrahiere ich die Datenzugriffsobjekte in eine abstrakte Factory, sodass die Implementierung aus der Anwendung ausgeblendet wird.

Wie Sie es tun, bleibt Ihnen überlassen, solange Sie ein bewährtes und gut bekanntes Design für die Implementierung wählen. Ich denke, Ihr Endprodukt wird gut unterstützt und robust sein.

0

Schauen Sie sich die Code Camp Server für eine gute Referenz-Anwendung, die genau diese Sache tut und als @haacked sagte Zusammenfassung, die weg, um sie getrennt zu halten.

1

Ich denke, Billy McCafferty S#arp Architecture ist ein ziemlich schönes Beispiel für die Verwendung von ASP.NET MVC mit einer Datenzugriffsebene (mit NHibernate als Standard), Abhängigkeitsinjektion (Ninject atm, aber es gibt Pläne, den CommonServiceLocator zu unterstützen) und testen Entwicklung Das Framework ist noch in der Entwicklung, aber ich halte es für ziemlich gut und stabil.Ab der aktuellen Version sollte es nur wenige Änderungen geben, bis eine endgültige Version verfügbar ist. Daher sollte die Codierung in Ordnung sein.

0

Verwenden Sie LINQ. Erstellen Sie eine LINQ to SQL-Datei und ziehen Sie alle benötigten Tabellen und Ansichten per Drag & Drop. Dann, wenn Sie Ihr Modell anrufen, werden alle Ihre CRUD-Level-Zeug automatisch für Sie erstellt.

LINQ ist das Beste, was ich seit langem gesehen habe. Hier sind einige einfache Beispiele, um Daten aus dem Blog von Scott Gu zu erhalten.

LINQ Tutorial

0

Ich habe gerade mein erstes Projekt MVC und ich verwenden, um ein Dienst-Repository Design-Muster. Im Moment gibt es eine Menge Informationen darüber im Internet. Es hat meinen Übergang von Linq-> Sql zu Entity Framework mühelos gemacht. Wenn Sie der Meinung sind, dass Sie sich stark verändern werden, müssen Sie die zusätzlichen Schnittstellen nutzen.

Ich empfehle Entity Framework für Ihr DAL/Repository.

1

Ich habe ein paar MVC-Anwendungen gemacht und ich habe eine Struktur gefunden, die sehr gut für mich funktioniert. Es basiert auf Rob Conery's MVC Storefront Series, die JPrescottSanders erwähnt (obwohl die von ihm gepostete Verbindung falsch ist).

So geht hier - ich versuche normalerweise, meine Controller zu beschränken, nur Sichtlogik zu enthalten. Dies umfasst das Abrufen von Daten, die an die Ansichten übergeben werden, und das Zuordnen von Daten, die von der Ansicht an das Domänenmodell zurückgegeben werden. Der Schlüssel ist, zu versuchen, Geschäftslogik aus dieser Schicht herauszuhalten.

Zu diesem Zweck habe ich normalerweise 3 Schichten in meiner Anwendung. Die erste ist die Präsentationsschicht - die Controller. Die zweite ist die Service-Schicht - diese Schicht ist verantwortlich für die Ausführung komplexer Abfragen sowie Dinge wie Validierung. Die dritte Ebene ist die Repository-Ebene - diese Ebene ist für den Zugriff auf die Datenbank verantwortlich.

Also in Ihrem Produkte Beispiel würde dies bedeuten, dass Sie ein ProductRepository mit Methoden wie GetProducts() und SaveProduct (Produktprodukt) haben würden. Sie hätten auch einen ProductService (der vom ProductRepository abhängt) mit Methoden wie GetProductsForUser (Benutzer user), GetProductsWithCategory (Category category) und SaveProduct (Product product). Dinge wie Validierung würden auch hier passieren. Schließlich hängt Ihr Controller von Ihrer Serviceschicht zum Abrufen und Speichern von Produkten ab.

Sie können mit dem Überspringen der Service-Schicht durchkommen, aber Sie werden normalerweise feststellen, dass Ihre Controller sehr fett werden und dazu neigen, zu viel zu tun. Ich habe diese Architektur schon einige Male ausprobiert und es funktioniert meistens sehr gut, besonders da es TDD und automatisierte Tests sehr gut unterstützt.

0

ich denke, du brauchst eine Orm.

zum Beispiel Entity Framework (Code zuerst)

Sie einige Klasse-Modell erstellen können.

Verwenden Sie diese Modelle für Sie Logik und Ansicht und Zuordnung zu Db (v1).

Wenn dba geben Sie neue db (v2), ändern Sie nur die Zuordnung config. (V1 und v2 sind alle rdb, sql Server, mysql, oracel ...), wenn db (v1) ist eine rdb und db (v2) ist ein Nosql (Mongo, Redis, Couchbase ...), Dass die Arbeit nicht

sein kann, einige finden tun muss und ersetzen

Verwandte Themen