Domain Driven Design con un modello di database EAV

3

Come si può applicare DDD a un modello di database EAV?

Considera questo modello di database EAV:

Come dovrei costruire un modello di dominio se tutte le mie entità e i loro attributi saranno archiviati nel database?

Aggiorna

Per aiutare a chiarire la domanda, darò un esempio. Se creo un negozio che venderà alcuni prodotti , allora avrò a disposizione 2 entità nel mio modello di dominio.

Ora la mia entità Product avrà normalmente un numero fisso di attributi (es: Product_name , sku , weight , ecc ...). Tuttavia, in un modello EAV le entità hanno un numero variabile di attributi.

Come dovrei scrivere un modello per Product se ogni sua istanza concreta avrà un numero diverso di attributi?

    
posta Songo 18.02.2013 - 18:01
fonte

1 risposta

3

DDD non dice nulla riguardo a come continuerai a conservare i tuoi dati e non dovresti preoccuparti di queste cose quando crei il tuo modello di dominio. Così facendo legerai il tuo dominio al tuo database (o altro metodo di persistenza) che sconfigge lo scopo di creare un modello di dominio ricco per cominciare.

Da: link

So Why “There Is No Database”? Domain Driven Design states specifically, in the name, why – we are designing our applications from the point of view of the Domain, and the Domain is drawn from the Ubiquitous Language we negotiate with our Domain Experts.

If we were to start with a database the it would be Database Driven Design. If we were to consciously or subconsciously bring elements from the database into our Domain, then we would risk compromising our Domain model purely to support the persistence layer we had chosen.

Guardando le tabelle del database che hai fornito al codice per l'aggregato in c #, potresti avere un aspetto simile a questo:

public class MyDomainObject
    public int Id { get; set; }

    public IList<MyDomainObjectAttribute> Attributes = new List<MyDomainObjectAttribute>();

    public class MyDomainObjectAttribute {
            public string Name { get; set; }        
            public string Value { get; set; }
    }
}

Possiamo quindi utilizzare una classe mapper o qualcosa di simile (ORM, EventStore, ecc ...) per mantenere il nostro aggregato in una memoria duratura (sia esso un database o qualcos'altro).

    
risposta data 18.02.2013 - 18:28
fonte

Leggi altre domande sui tag