Diciamo che ho l'entità tipica autoDDD: sottoclassi e le entità di radice
class Car : Entity
{
public double MaxSpeed { get; set; }
public Color Color { get; set; }
/* ... */
}
Questa entità, nel mio modello di dominio, sarebbe l'entità radice di un Aggregate.
Ora diciamo che io specializzo le macchine. Creo un Ferrari, ed i felici possessori di Ferrari piace chiamarli con un soprannome:
class Ferrari : Car
{
public string Nickname { get; set; }
}
Diciamo che ho un altro soggetto, il società entità. Sarebbe l'entità root di un altro Aggregate. Ci sono molte persone che lavorano in un'azienda, rappresentata dall'entità Persona. Le persone possono avere macchine. Ma la Presidente di una società di solito è molto ricca e questo tipo di persone, hanno Ferraris:
class President : Person
{
public Ferrari Ferrari { get; set; }
}
In questa situazione, ho l'entità presidente, che è all'interno il società Aggregate, che contiene un riferimento a una Ferrari, una specializzazione dell'entità radice di un altro aggregato.
È corretto in vista della DDD? Posso/dovrei considerare la specializzazione delle entità root stesse come entità root dello stesso aggregato? Voglio dire, nel dominio che ho descritto, è l'entità Ferrari anche l'entità radice del Car Aggregate (dal momento che Ferrari è anche un'auto)?
Ora diciamo che devo persistono questo modello a un database. Penso che la mia domanda non dipenda dal framework OR/M che userò.
Come si crea la tabella con Automobili? Devo costruire un singolo tavolo Cars, con una colonna "CarType" (valori possibili: "Car", "Ferrari") e una colonna Nickname nullable?
Oppure dovrei costruire un tavolo per Auto e un tavolo per Ferrari, quest'ultimo con il suo PK e FK di automobili?
Grazie!
Fantastico! Grazie! In realtà, nel mio sistema "reale", "Automobili" sono molto importanti, ma la "Ferrari" è la cosa più importante nel mio dominio, di cui non posso perdere traccia, devo fare statistiche su di esso. –