Frage

Wie werden Sie ein Domain-Modell für dieses einfache Beispiel erstellen? Ein Rezept kann viele Zutaten und eine Zutat kann in vielen Rezepten verwendet werden. Wie viel von jeder Zutat in jedem Rezept verwendet wird ebenfalls gespeichert. Ich habe die folgenden drei Datenbanktabellen entwickelt, um diese Daten zu speichern und die Beziehungen.

Ich versuche jetzt, ein Domain-Modell zu erstellen, dies zu repräsentieren. Ich habe ein einfaches Beispiel mit zwei Klassen. Ich lief dann in Schwierigkeiten mit diesem Modell, wenn ich darüber nachgedacht, einen neuen Bestandteil zu schaffen. Es müßte eine Klasse mit aus der Menge Eigentum. Wie soll das modelliert werden?

Datenbank-Tabellen

alt text http://img190.imageshack.us/img190/340/databasex .png

Domain Model

alt text http://img24.imageshack.us/img24/8859/classesy .png

War es hilfreich?

Lösung

Wenn Sie versuchen, Domain-Driven Design zu tun, nicht mit Tabellen beginnen. Aufwendige zuerst ein konzeptionelles Modell, das die zugrunde liegende Domäne widerspiegelt. Ich stimme mit ndp: recipeIngredient ist ein bisschen ein sperrigen Namen / Konzept, aus einer DDD Perspektive

.

Ich glaube, das Modell die folgenden Konzepte benötigt: Rezept, Zutaten, Messen und RecipePreparation.

Ein Rezept ist eine Ansammlung von Zutaten. Jeder Inhaltsstoff zu einem Rezept gehört, benötigen eine Maßnahme zugeordnet sind, als eine Spezifikation für die Herstellung. Auch müssen Sie die RecipePreparation modellieren die tatsächliche Menge der einzelnen Bestandteile während einer bestimmten Zubereitung des Rezepts verwendet zuzuordnen.

Eine Maßnahme besteht aus Einheit und die Menge (z.B. 2 Tassen, 0,5 oz, 250 g, 2 EL ...).

Ich sehe hier zwei verschiedene Dinge, die während der Analyse gemischt werden könnten und sollten gespalten gehalten werden: Rezept / Ingredient / Measure als Spezifikation, um zu kochen etwas (eine Instanz für jedes Rezept) und RecipePreparation / Ingredient / Measure als Beton Vorbereitung eines Rezept, von einer bestimmten Person zu einem bestimmten Zeitpunkt durchgeführt und verschiedene Maßnahmen dargestellt werden kann (verdoppelt alle Zutaten, weil das Rezept Spezifikation für zwei Platten ist, und Sie haben vier Gäste ... so ähnlich).

Sie können tiefer gehen und Modellierung Dinge wie einige Zutaten beginnen eine Reihe von austauschbaren Bestandteilen aufweisen (zB wenn Sie Ziegen nicht Käse Verwendung Mozzarella haben), ein Kochbuch, das eine Reihe von Rezepten der gleichen Kategorie, eine Kochzeit für das Rezept, etc.

Andere Tipps

In Ihrem Domain-Modell erstellen recipeIngredient Klasse einen Verweis auf einen bestimmten Bestandteil und eine Menge enthält.

Dann die Recipe.Ingredients Liste ändern recipeIngredient Objekte enthalten. Schließlich entfernen Menge aus der Klasse Zutaten.

Nur ein Tipp: Die meisten puristische Domain Modellierer sagen würden Sie Ihr Domain-Modell erstellen sollten zuerst und sie erst viel später mit der Datenbank betreffen.

Da Sie Daten in Ihrer Join-Tabelle (Menge) haben, ist die Antwort, dass Sie eine Klasse müssen sie vertreten. (Es gibt auch andere Alternativen, aber nicht eine Überlegung wert.)

Als Ihr Modell wächst, werden Sie zweifellos hier mehr Daten hinzufügen müssen. Zum Beispiel, wie kann man die Reihenfolge der Zutaten im Rezept?

recipeIngredient ist ein bisschen ein sperrigen Namen (und Konzept), von einer Domain Driven Design Perspektive. Sie können in der Lage sein, mit unterschiedlichen Namen zu entwickeln, die sich besser fühlt. Aber in der Regel ist dies eine notwendige Implementierung Detail. Sorry, ich habe nicht den DDD Buch Evan praktisch eine Referenz zur Verfügung zu stellen.

Ich glaube, ihr alle verloren. Das ursprüngliche Plakat hatte den richtigen Impuls, wurde aber in die falsche Route. Eigentlich er die Zuordnungstabelle zeigt, mit dem alten Riehl heuristischen (Kombination den Namen der l und r Beziehungen) scheint die Tatsache zu sein Adressierung, dass es ein many-to-many-Mapping. Aber was ist wirklich passiert ist, dass Sie eine Rolle Klasse hier (Coad beim Domain-Modellierung Ansatz diese verwendet viel). Hier ist das Ding aber: das ist, was Zutaten schon ist! Die fehlende Abstraktion öffnet hier eine Dose Würmer aber: es ist das Ding, das hinzugefügt wird. Man könnte argumentieren, dass das wäre eine Basisklasse, z.B. Essen (da wir buchstäblich per Definition nicht ungenießbar Dinge zu einem Rezept hinzufügen können), aber dann haben Sie die Belastung für alle Lebensmittel der Rechnungslegung, oder Sie können sie nur nennen.

Also das richtige Modell Ich denke Rezept ist enthält Bestandteile, die eine gewisse Menge an einem bestimmten Lebensmittel haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top