Qual è il modo migliore per dettare un repository che consente di compilare le proprietà degli oggetti e lasciare gli altri nulli?

0

Sto lavorando su un progetto di Domain Driven Design e ho il seguente problema.

Sto cercando di creare un repository che restituisca un elenco di oggetti. Gli oggetti hanno 15 - 20 proprietà e in base all'utilizzo ho bisogno ogni volta di alcuni di essi. Il ritorno di oggetti completamente popolati avrà un costo durante la popolazione, la serializzazione e la deserializzazione. Qual è il modo ottimale di dettare al repository (magari usando un parametro nel metodo di ricerca del repository) quali proprietà popolano e lasciano gli altri null?

La suddivisione dell'oggetto in più sottili non è un'opzione.

Una soluzione che pensavo passasse al repository un'istanza dell'oggetto (come progetto) con valori nulli alle proprietà che non desidero. Il repository leggerà questi valori e nella lista dei risultati popolerà solo le proprietà non nulle di conseguenza.

C'è un modo migliore per farlo?

    
posta Ioannis Dontas 20.02.2017 - 10:31
fonte

1 risposta

1

La tua soluzione suggerita sembra simile al modello "query per esempio" che era comune con i database degli oggetti. Soffre dello stesso inconveniente: richiede codice di query per sapere come costruire oggetti di dominio validi, il che significa che quando gli oggetti del dominio si evolvono potrebbe essere necessario apportare modifiche non necessarie al codice di query semplicemente per mantenere il codice di convalida felice, in particolare quando la convalida aggiuntiva le regole sono state aggiunte.

Esistono numerosi approcci che non presentano il problema. Se si utilizza la riflessione, fornire semplicemente un elenco di nomi di campi da includere o escludere è un approccio. Oppure è possibile definire sottoinsiemi validi nel repository e utilizzare un'enumerazione per selezionarne uno. Puoi anche utilizzare le annotazioni per consentire ai sottoinsiemi di essere definiti negli oggetti del dominio stessi, se la tua lingua lo supporta.

    
risposta data 20.02.2017 - 14:05
fonte

Leggi altre domande sui tag