Beh, sto cercando di applicare i principi di progettazione basati su domini per la mia applicazione, con un modello di dominio ricco che contiene sia campi di dati che logiche di business. Ho letto molti libri su DDD, ma sembra che i loro modelli di dominio (chiamati entità) siano molto semplici. Diventa un problema quando ho un modello di dominio con 10-15 campi di dati, come quello qui sotto:Progettazione basata su domini: come gestire modelli complessi con molti campi dati?
class Job extends DomainModel{
protected int id;
protected User employer;
protected string position;
protected string industry;
protected string requirements;
protected string responsibilities;
protected string benefits;
protected int vacancy;
protected Money salary;
protected DateTime datePosted;
protected DateTime dateStarting;
protected Interval duration;
protected String status;
protected float rating;
//business logic below
}
Come potete vedere, questo modello di dominio contiene un sacco di campi di dati, e tutti loro sono importanti e non può essere spogliato. So che un buon modello di dominio ricco non dovrebbe contenere metodi setter, ma piuttosto passare i suoi dati al costruttore e mutare stati usando la logica di business. Tuttavia, per il modello di dominio sopra riportato, non posso passare tutto al costruttore, poiché porterà a 15+ parametri nel metodo del costruttore. Un metodo non dovrebbe contenere più di 6-7 parametri, non pensi?
Quindi, cosa posso fare per gestire un modello di dominio con molti campi dati? Dovrei provare a scomporlo? Se é cosi, come? O forse, dovrei semplicemente usare una classe Builder o una riflessione per inizializzare le sue proprietà al momento dell'istanza, quindi non inquinerò il costruttore con così tanti argomenti? Qualcuno può dare qualche consiglio? Grazie.
Vedo, sì, penso che dovrei iniziare a implementare più oggetti valore, come l'oggetto valore Denaro che ho già. Grazie per il suggerimento, inizierò componendo i campi dati per oggetti di valore inferiore e useremo oggetti valore in ciascuna entità. So che i campi protetti a volte interrompono l'incapsulamento, quindi dovrei passare al privato nella maggior parte dei casi, anche grazie. Tuttavia, non sono sicuro del modello di dominio rispetto all'entità, a mio avviso un modello di dominio è un'entità o che un'entità è un modello di dominio con un'identità, è corretto? –
@LordYggdrasill Un modello di dominio è l'intero insieme di "cose" che hanno significato nel tuo dominio, ad es. entità, oggetti valore, ecc. Vedere per esempio [questo articolo] (https://en.wikipedia.org/wiki/Domain_model), il diagramma mostra un esempio di modello di dominio che contiene molte classi. – theDmi
Vedo, grazie. L'ho capito meglio dopo aver letto alcuni articoli sulla radice aggregata. –