2009-06-05 2 views
1

Ich bin neu im MVC-Framework und habe gerade das NerdDinner-Beispielprojekt durchlaufen. Ich liebe diesen Ansatz über form-basierte asp.net.Kann ich das NerdDinner-Beispielprojekt als Basisvorlage für ein größeres Projekt verwenden?

Ich würde gerne ein größeres Projekt mit diesem Ansatz drehen. Sehen Sie etwas in diesem Projekt, das mich davon abhalten würde, die Grundstruktur auf eine komplexere Website zu erweitern?

Beispiele für Dinge, die machen mich vorsichtig: 1) Die NerdDinner Probe eine db von nur zwei Tabellen zugreift, hat mein db um 30 2) Das NerdDinner Projekt direkt die LinqToSQL Klassen verwendet ... die ganzen Weg von das Modell, durch den Controller, zur Ansicht ... ist das koscher für ein größeres Projekt?

Sehen Sie irgendwelche anderen Teile des NerdDinner-Frameworks, die mir in der Zukunft Kummer bereiten könnten?

Antwort

1

Ich würde eine Service-Schicht zwischen den Repositories und Controllern hinzufügen. Die Service-Schicht enthält Ihre gesamte Geschäftslogik, sodass Ihre Controller hauptsächlich mit der Verarbeitung von Formulareingaben und dem Seitenfluss arbeiten.

In den Repositorys bin ich LinqToSql Klassen und Felder zu Domänenmodellen zuordnen und dann die Domänenmodelle innerhalb der Service-Schicht, Controller und Ansichten verwenden. Für ein größeres System werden sich die zusätzlichen Schichten auf lange Sicht bewähren.

+0

finden Sie nicht, dass die Konvertierung zu/von Domänenmodellen zu LinqToSql-Klassen, nicht als solche ein Overhead, aber Sie am Ende schreiben viel mehr Code? – David

+0

@David ja es erfordert mehr Code, um die Mapping-Schicht zu unterstützen, und ich würde es nicht vorschlagen, es sei denn, es gab einen Vorteil dafür. Eine andere Möglichkeit wäre, nHibernate zu verwenden, aber mein Team war dazu nicht bereit (steile Lernkurve). Aber für unser Projekt hat sich die extra Mapping-Ebene, die leicht zu schreiben war, bezahlt gemacht, als wir 3-4 beschränkte Kontexte in unserem Design hatten. –

1

Es gibt eine Menge Diskussionen über das Internet, wenn es um die Klassen Linq to Sql geht. Einige haben das Gefühl, dass es nicht genug Abstraktion ist, wenn man die Klassen direkt benutzt, und manche denken, dass sie dafür da sind. Bei der Arbeit beginnen wir mit der Überarbeitung unserer Website, und wir verwenden MVC. Die Art, wie wir uns entschieden haben zu gehen, war im Grunde jede der LINQ to SQL-Klassen implementiert eine Schnittstelle. IE:

public partial class LinqToSqlClass //generated class 
{ 
    public int Id{get;set;} 
} 

interface ILinqToSqlClass 
{ 
    int Id{get;set;} 
} 

public partial class LinqToSqlClass : ILinqToSqlClass 
{ 

} 

Dies ist nur ein sehr kleiner Teil davon. Wir haben dann ein Repository, das Ihnen eine dieser generierten Klassen liefert, aber nur die ihres Schnittstellentyps. Auf diese Weise arbeiten wir nie direkt mit den Linq to Sql-Klassen. Es gibt viele verschiedene Möglichkeiten, dies zu tun, aber im Allgemeinen würde ich ja sagen, wenn Sie mit einer großen Datenbank arbeiten (insbesondere wenn sich das Schema ändern könnte) oder wenn Sie mit Daten arbeiten, die möglicherweise aus mehr als einer Quelle stammen Benutze die Klassen definitiv nicht direkt.

Fazit ist, es gibt viele gute Informationen in diesem Nerd Dinner Kapitel, aber wenn Sie Ihr eigenes Projekt erstellen, werden Sie natürlich auf eigene Probleme stoßen, also nehmen Sie es wie Sie gehen.

0

Der Nerd-Dinner-Text macht den Anspruch, dass das MVC-Framework genauso gut andere gebräuchliche Datenabstraktionen aufnehmen kann. (Es ist wahr.) Es klingt, als ob Ihre Organisation bereits eine hat, die es mag. Eine gute Lernstrategie wäre wahrscheinlich, sich an die anderen anzupassen.

2

Ich stimme mit anderen überein, dass das Modell der einzige Ort sein sollte, den Sie linq2sql verwenden, und mein kleines Addendum dazu verwendet nur linq2sql in Modellen in kleinen Projekten. Bei größeren Sites kann es sich lohnen, ein separates Web-Service-Projekt zu erstellen, das mit der Datenbank kommuniziert und den Web-Service in Ihrem Modell verwendet.

Ich habe das Nerd Diner-Beispiel nie vollständig ausgecheckt, aber andere Best Practices sind typisierte Ansichten und die Verwendung eines Datamodelers, der eine einfache Validierung ermöglicht (siehe xval oder DataAnnotations Modellbinder).Für mich sind dies 2 der wichtigsten Best Practices/

Stephen Walter hat viele gute Tipps zu seinem website, die es wert sind, auszuprobieren und bei der Einrichtung eines neuen MVC-Projekts zu berücksichtigen.

+0

FYI: xVal wurde entwickelt, um mit der Web-Client-Seite der Dinge und nicht für Ihre Server-Seite Domänenmodell Validierung zu helfen. –

+0

Eigentlich ist es entworfen, um mit Client-und Server-Seite Validierung des Modelstate zu helfen siehe http://blog.codeville.net/2009/01/10/xval-a-validation-framework-for-aspnet-mvc/. Es geht nur um die Validierung von Daten und nicht um die Validierung von Geschäftsregeln, obwohl Sie mit dem CustomValidation-Attribut aus DataAnnotations für Geschäftsregeln einen langen Weg einschlagen können. –

Verwandte Themen