2009-06-21 10 views
4

In MVC, 1 Modell 1 Tabellen oder 1 Modell mehrere Tabellen?In MVC, 1 Modell 1 Tabellen oder 1 Modell mehrere Tabellen?

Ich baue eine Anwendung, die 3 Tabellen enthalten. Ich weiß nicht, ob ich ein Modell für alle 3 Tabellen erstellen oder 3 Modelle für 3 Tabellen erstellen soll.

In dem Fall, dass ich 3 Modelle für 3 Tabellen verwende, wo sollte ich den Code setzen, wenn ich diese 3 Tabellen beitreten möchte? Den Code in eines von 3 Modellen einfügen?

Irgendwelche Vorschläge?

Antwort

4

Normalerweise erstellen Sie ein Modell pro Tabelle. In Ihrem Fall bedeutet das, dass Sie 3 Modelle benötigen. Wenn ich "Modell" sage, meine ich eine Klasse, die eine einzelne Zeile (normalerweise) in einer einzigen Tabelle darstellt.

zum Beispiel: Tabellen:

  1. Produkte
  2. Bestellungen
  3. Kunden

in einem solchen Fall die leicht und einfach 3 verschiedene Klassen erstellen (die die Daten repräsentieren Modell der Anwendung), wobei die erste Klasse für ein einzelnes Produkt steht, die nächste für eine Bestellung steht und die letzte Klasse für einen einzelnen Kunden steht.

+4

Wenn ich diese 3 Tabellen beitreten möchte, wo sollte ich den Code einfügen? – Billy

+0

Wenn Sie eine Beziehung "viele zu viele" haben, haben Sie im Allgemeinen eine Tabelle, die die Beziehung darstellt, die wahrscheinlich nicht von einem Modell repräsentiert wird. –

+0

Der offensichtlichste Weg ist das Hinzufügen einer Eigenschaft zu einer Klasse, die die zugehörigen Daten darstellt. (dh die Klasse 'Kunde' hat eine Eigenschaft namens 'Aufträge', die eine Sammlung des Typs 'Auftrag' ist. (Übrigens können Sie das ADO.NET-Entity-Framework verwenden, was all dies für Sie funktioniert) – yosig81

5

Im Allgemeinen sollte der "Modell" -Teil von MVC als "Darstellungsmodell" oder "Darstellungsmodell" interpretiert werden, dh als eine Klasse, die alle von der Ansicht benötigten Daten und Verhaltensweisen kapselt. Dies kann dem Domänenmodell entsprechen oder nicht.

Domänenmodelle sollten so konzipiert sein, dass sie unabhängig von der Benutzeroberfläche sind. Dies bedeutet, dass solche Modelle nicht mit UI-spezifischen Daten und Verhaltensweisen belastet werden sollten, z. B. wenn festgestellt wird, ob eine bestimmte Schaltfläche aktiviert ist oder nicht.

Sie können auch dieselben Domänenobjekte in verschiedenen Ansichten anzeigen (z. B. Master/Detail oder Anzeige/Bearbeiten). Wenn sich diese Ansichten ausreichend unterscheiden, ist ein View Model für jede View von Vorteil.

Also, im Allgemeinen sollten Sie Ihre Domain-Ebene und Ihre Präsentationsebene unabhängig voneinander entwerfen.

In der Domänenebene können Sie Ihre drei Tabellen als drei Klassen modellieren. Bücher wie Fowlers Patterns of Enterprise Application Architecture und Evans Domain-Driven Design enthalten viele Anleitungen zum Modellieren relationaler Daten als Domänenmodelle.

Wenn es um das Modellieren der Ansichten in MVC geht, ist es am sinnvollsten, ein Modell pro Ansicht zu erstellen. Ein solches View-Modell kann einfach ein einzelnes Domain-Objekt einkapseln, es kann jedoch auch mehrere unterschiedliche Domain-Objekte einkapseln und aggregieren.

Auf diese Weise können Sie die Trennung von Bedenken sicherstellen, und dass Ihre Klassen dem Prinzip der einfachen Verantwortung folgen. Für sehr einfache Szenarien kann es sinnvoll sein, das Domänenmodell und das Darstellungsmodell in einer Schicht zusammenzufassen, aber Sie sollten wissen, dass dies im Wesentlichen bedeutet, dass es kein Domänenmodell in der Lösung gibt - alle Modelle wären reine Darstellungsmodelle .

+0

Es tut mir leid, ich weiß, dass dies ein alter Post ist.Nach dem Lesen Ihres Beitrags recherchierte ich die verschiedenen Arten von Modell und ich bin links Es ist unklar, wie oder ob es notwendig ist, das Domänenmodell vom Präsentationsmodell zu trennen.Sie sagten, dass nur ein Modell pro Ansicht vorhanden sein sollte.Hierbei sollte es separate Klassen für das Domänenmodell geben, das im Präsentationsmodell für aufgerufen wird die gegebene Ansicht? – Klik

+1

@Klik Es ist unmöglich, eine einzige Antwort auf diese Frage zu geben , denn es hängt von Ihrer Motivation ab, ein bestimmtes Design umzusetzen. Wenn Sie ein separates Domänenmodell haben möchten, wagt man sich in das Gebiet der geschichteten Anwendungsarchitektur hinein, und es sind damit verbundene Kosten verbunden: http://blog.ploeh.dk/2012/02/09/IsLayeringWorththeMapping –

+0

Dieser Beitrag ist genau das, was ich lesen muss, danke! – Klik

Verwandte Themen