Martin Fowler considera il modello di dominio anemico come anti-pattern.Rich Domain Model e ORM
Anche il rollover del modello di persistenza come modello di dominio sembra gravemente disattivato a causa di Object Relational Impedence Missmatch. Per motivi di persistenza e normalizzazione, tendiamo a suddividere le classi in minuscoli pezzi molto piccoli, i metodi di schiaffo in cima a queste classi sono stupidi. Inoltre, la persistenza raramente cambia, ma la logica di business cambia un po '.
Quindi abbiamo bisogno di un DomainModel che si basa sul modello di persistenza (invece di essere uno e lo stesso). Questo modello di dominio conterrà quindi proprietà e metodi della logica di business.
Ma ora questi modelli di dominio sono ancora dietro il servizio e per poterli esporre al mondo esterno è necessario convertirli in DTO.
Stiamo facendo mappature così manny qui.
- Persistenza al Domain Model
- Per convertire Domain Model in DTOs per passare insieme tra i servizi
E non finisce qui, dal momento che il DTO può avere bisogno di essere mappati nel ViewModel.
Tutto ciò e il problema della duplicazione della logica di convalida non vanno ancora a buon fine, perché il client richiede la convalida in tempo reale. ViewModel non sa nulla sulla validazione, quindi in una SPA, ad esempio, sei costretto a riscrivere la logica di convalida di nuovo, sul lato client (solitamente in javascript).
Anche i servizi sono per natura senza stato (messaggio o RPC orientato), quindi stiamo eseguendo tutte queste mappature, tra Persistenza, OO e ritorno a Procedural, a quali vantaggi? Come giustificheresti il costo in termini pratici della maggior parte del budget IT?
Ho capito come avere DDD completo, con Radici aggregate, Modelli di dominio ecc. Sarebbe "bello" ma come si può giustificare il costo e l'impatto sulla produttività di sviluppo?
antipattern (o antipattern) è un modello utilizzato nella vita sociale o di lavoro operazioni o ingegneria del software che può essere comunemente usato, ma è inefficace e/o controproducenti nella pratica
E se sì , DDD e Rich Domain Model non rientrano nella definizione di anti-pattern sopra rispetto al modello di dominio "Lean". Scusa, disprezzo la parola caricata, "Anemico".
Mantenendo il modello di dominio, "Lean" si consente effettivamente di essere condiviso senza violare il "principio di dipendenza astratta", "non ripetere te stesso" e il processo di mappatura dei dati che richiede tempo, noioso e soggetto a errori carrier to another, e qualunque sia l'Unit Test che si aggiunge a quello (a meno che non stiate pensando di fare una mappatura senza test unitari e sperare per il meglio).
Penso che l'articolo che hai collegato riassuma il dilemma. Tranne che non credo nell'invio di Domain Model attraverso il filo, sembra il lavoro di un DTO. Non ha senso avere un comportamento sul DTO e esporlo al cliente. Quindi per me l'architettura è solo "fattibile" con un altro strato di astrazione e mappatura oltre ai 3 che ha menzionato. E questo è MOLTO di mappatura! Non è corretto dire che l'altro modo di introdurre la preoccupazione dell'interfaccia utente per il dominio per il riutilizzo. Penso che ci sia un mezzo "felice" tra i 2 estremi del pollar. – Alwyn
"Sposta meno dati in giro e le cose probabilmente diventeranno più semplici" - La sua conclusione alla fine dell'articolo, che suona come Lean Model per me. – Alwyn
"Non ha senso avere un comportamento sul DTO ed esporlo al client" - ora capisco la connessione che stai facendo tra il modello di dominio ricco/anemico e il layering. Sottintendi che gli oggetti del dominio dovrebbero essere rimossi dalla maggior parte della logica di business possibile nel tentativo di inviarli direttamente al livello dell'interfaccia utente senza la necessità di DTO? O è qualcos'altro a cui ti riferisci come "Lean Model"? – guillaume31