Il tracciamento delle modifiche all'istantanea interrompe i principi DDD?

1

Sto costruendo un sito Web con MVC 5 e Entity Framework 6, implementando l'unità di lavoro & Modelli di deposito e, per flessibilità e prestazioni, desiderano utilizzare il rilevamento delle modifiche di snapshot di Entity Framework piuttosto che il rilevamento delle modifiche proxy. Lo svantaggio di questa funzione è che la correzione della proprietà di navigazione non viene eseguita fino a quando DetectChanges viene chiamato da DbContext .

Aggiunta di un elemento a una raccolta ...

order.LineItems.Add(orderLineItem);

L'associazione inversa non verrà aggiornata fino a quando DetectChanges è chiamato ...

lineItemOrder = orderLineItem.Order; // lineItemOrder == null
dbcontext.DetectChanges();
lineItemOrder = orderLineItem.Order; // lineItemOrder == order

Questo comportamento di correzione delle proprietà di navigazione sembra troppo specifico per Entity Framework per il livello di astrazione che mi piacerebbe vedere. Questo comportamento infrange i principi del Domain Driven Design o può DetectChanges essere considerato una transazione commerciale?

    
posta mdh88 28.01.2015 - 18:14
fonte

1 risposta

0

Non è chiaramente una transazione commerciale, poiché ci si potrebbe aspettare che lineItemOrder.Order venga popolato facilmente senza bisogno di chiamare il metodo separato,

Con questo approccio non solo sarebbe difficile eseguire il debug, il modello di dominio non funziona come ci si aspetta che funzioni.

Quando si progetta un modello di dominio si dovrebbe cercare di mantenere pulito il modello di dominio da framework di supporto come la persistenza.

personalmente non vorrei usare

order.LineItems.Add(orderLineItem);

durante la progettazione di un modello di dominio, invece userei

order.AddLineItem(orderLineItem);

e rendi order.LineItems readonly

Se è possibile incapsulare dbcontext.DetectChanges(); nel metodo AddLineItem , sarebbe un modello di dominio migliore anche se non è il design ottimale,

    
risposta data 29.01.2015 - 14:29
fonte

Leggi altre domande sui tag