Supponiamo che stia sviluppando un sistema RSS (seguendo le pratiche DDD). Gli utenti hanno account. Gli account hanno feed. I feed hanno articoli. Account
, Feed
e Article
sono le mie radici aggregate e ArticleAccountMeta
(un aggregato che contiene informazioni se un account ha già letto un articolo).
Ho deciso di andare senza un modello di repository separato (entità Hibernate), quindi le mie radici aggregate sono anche le mie entità ORM (per diversi motivi, non importanti per la domanda).
Ora diciamo che un utente (account) vuole vedere tutti i suoi feed con i loro articoli. Quindi il server deve produrre un elenco di feed con i loro articoli. Accanto ad ogni articolo, ho bisogno dell'oggetto ArticleAccountMeta
per indicare se l'utente / account ha già letto l'articolo. Naturalmente, vorrei creare alcune altre classi di "visione". Questi sarebbero restituiti da un servizio di dominio (poiché il processo di costruzione è più complicato e contiene la logica aziendale) e farebbero direttamente riferimento alle radici degli aggregati del dominio.
La mia prima domanda è - va bene avere queste classi di vista nel "livello" del dominio nonostante sia solo una diversa rappresentazione delle radici aggregate già create? Devo chiamarli modelli di visualizzazione o sono veri e propri root aggregati che vengono utilizzati solo per la lettura?
La mia seconda domanda è: quando si creano DTO senza alcuna logica di business aggiuntiva, va bene ignorare la creazione di un servizio di dominio e utilizzare direttamente un repository?
La mia terza domanda è - nel livello dominio, non so come saranno usate le classi vista, quindi non dovrei dare istruzioni ai repository di recuperare specifici riferimenti con entusiasmo. Tuttavia, ho bisogno di farlo per prevenire il problema N + 1. Qual è la soluzione corretta qui?