Domanda

Come creeresti un modello di dominio per questo semplice esempio? Una ricetta può avere molti ingredienti e un ingrediente può essere usato in molte ricette. Quanto di ogni ingrediente utilizzato in ogni ricetta è anche memorizzato. Ho progettato le seguenti tre tabelle di database per memorizzare questi dati e le relazioni.

Ora sto provando a creare un modello di dominio per rappresentarlo. Ho un esempio di base con due classi. Ho quindi avuto problemi con questo modello quando ho pensato di creare un nuovo ingrediente. Ci dovrebbe essere una classe senza la proprietà quantità. Come dovrebbe essere modellato?

Tabelle database

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

Modello di dominio

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

È stato utile?

Soluzione

Se si sta tentando di eseguire la progettazione guidata dal dominio, non iniziare con le tabelle. Elabora innanzitutto un modello concettuale che rifletta il tuo dominio sottostante. Sono d'accordo con ndp: RecipeIngredient è un po 'un nome / concetto imbarazzante, da una prospettiva DDD.

Penso che il modello abbia bisogno dei seguenti concetti: ricetta, ingrediente, misura e preparazione ricetta.

Una ricetta è un'aggregazione di ingredienti. Ogni ingrediente appartenente a una ricetta necessita di una misura ad esso associata, come specifica per la preparazione. Inoltre, è necessario modellare la preparazione ricetta per associare la quantità effettiva di ciascun ingrediente utilizzato durante una preparazione specifica della ricetta.

Una misura è composta da unità e quantità (ad es. 2 tazze, 0,5 once, 250 gr, 2 cucchiai ...).

Vedo qui due cose diverse che potrebbero essere mescolate durante l'analisi e che dovrebbero essere mantenute divise: ricetta / ingrediente / misura come specifica per cucinare qualcosa (un'istanza per ogni ricetta) e ricetta preparazione / ingrediente / misura come concreta preparazione di una ricetta, eseguita da una persona specifica in un momento specifico, e potrebbe utilizzare diverse misure (raddoppiato tutti gli ingredienti perché la specifica della ricetta è per due piatti e hai quattro ospiti ... qualcosa del genere).

Puoi andare più in profondità e iniziare a modellare cose come alcuni ingredienti con una serie di ingredienti intercambiabili (ad esempio se non hai formaggio di capra usa la mozzarella), un libro di cucina che raccoglie una serie di ricette della stessa categoria, un tempo di cottura per la ricetta, ecc.

Altri suggerimenti

Nel tuo modello di dominio crea una classe RecipeIngredient contenente un riferimento a un ingrediente specifico e una quantità.

Quindi modificare l'elenco Recipe.Ingredients per contenere oggetti RecipeIngredient. Rimuovere infine la quantità dalla classe Ingredient.

Solo un suggerimento: la maggior parte dei modellisti di domini puristi direbbe che dovresti prima creare il tuo modello di dominio e non preoccuparti del database fino a molto tempo dopo.

Dato che nella tabella di join sono presenti dati (quantità), la risposta è che è necessaria una classe per rappresentarli. (Ci sono altre alternative, ma non vale la pena considerare.)

Man mano che il tuo modello cresce, dovrai sicuramente aggiungere altri dati qui. Ad esempio, come si imposta l'ordine degli ingredienti nella ricetta?

RecipeIngredient è un po 'un nome (e un concetto) imbarazzante, dal punto di vista del design guidato dal dominio. Potresti riuscire a trovare nomi diversi che ti fanno sentire meglio. Ma in generale, questo è un dettaglio di implementazione necessario. Spiacenti, non ho a portata di mano il libro DDD di Evan per fornire un riferimento.

Penso che tutti voi siate persi. Il poster originale aveva il giusto impulso, ma stava prendendo la strada sbagliata. In realtà, la tabella di mappatura che mostra, usando il vecchio euristico Riehl (che combina i nomi delle relazioni le), sembra indirizzare il fatto che si tratta di una mappatura molti-a-molti. Ma ciò che sta realmente accadendo è che qui hai bisogno di una classe ruolo (l'approccio alla modellazione del dominio di Coad li ha usati molto). Ecco la cosa però: ecco cos'è già Ingredient! L'astrazione mancante qui apre però una lattina di worm: è la cosa che viene aggiunta. Si potrebbe sostenere che sarebbe una classe base, ad es. Cibo (dal momento che letteralmente, per definizione, non possiamo aggiungere cose non commestibili a una ricetta), ma poi hai l'onere di contabilizzare tutti gli alimenti, o puoi semplicemente nominarli.

Quindi il modello corretto che penso sia la ricetta contiene ingredienti che hanno una certa quantità di un alimento specifico.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top