Quindi, ho esaminato alcuni post sul Modello di specifica qui e non ho ancora trovato una risposta a questo.In quale livello gli oggetti Modello di specifica dovrebbero essere "nuovi"?
La mia domanda è, in un'architettura a più livelli, in cui esattamente le specifiche devono essere "aggiornate"?
ho potuto mettere nel mio livello di servizio (aka, livello di applicazione è talvolta chiamato ... in fondo, qualcosa di un aspx code-behind sarebbe parlare), ma mi sento come così facendo, I' lasciare che le regole aziendali fuoriescano dal dominio. Se si accede agli oggetti Dominio in qualche altro modo (oltre al Livello di servizio), gli oggetti Dominio non possono applicare le proprie regole aziendali.
È possibile inserire la specifica nella classe del modello tramite iniezione del costruttore. Ma ancora, questo sembra "sbagliato". Mi sento come se l'unica cosa che dovrebbe essere iniettata nelle classi del Modello siano i "servizi", come il Caching, il Log, il tracking di bandiera sporca, ecc ... E se puoi evitarlo, usare Aspects invece di sporcare i costruttori del Modello classi con tonnellate di interfacce di servizio.
Posso inserire la specifica tramite l'iniezione del metodo (a volte indicato come "Double Dispatch" ???), e in modo esplicito il metodo incapsula la specifica iniettata per applicare la sua regola aziendale.
Creare una classe "Servizi di dominio", che richiederebbe una (e) specifica (e) tramite l'iniezione del costruttore e quindi consente al Livello servizio di utilizzare il servizio di dominio per coordinare l'oggetto Dominio. Questo mi sembra OK, poiché la regola applicata dalla Specifica è ancora nel "Dominio" e la classe del Servizio di dominio può essere chiamata molto simile all'oggetto Dominio che sta coordinando. La cosa qui è che mi sento come se stessi scrivendo un sacco di classi e codice, solo per "correttamente" implementare il modello di specifica.
Aggiungete a ciò che la Specifica in questione richiede un Deposito per determinare se è "soddisfatto" o meno.
Ciò potrebbe causare problemi di prestazioni, esp. se uso il constructor injection b/c, il codice che consuma potrebbe chiamare una proprietà che forse avvolge la specifica e che, a sua volta, sta chiamando il database.
Quindi qualsiasi idea/pensiero/link ad articoli?
Dove è il posto migliore per il rinnovo e l'uso delle specifiche?
Non troppo sicuro se l'iniezione di un deposito in una specifica è un odore di codice o no. Controlla questa discussione su StackOverflow: [link] (http://stackoverflow.com/questions/5818898/where-to-put-global-rules-validation-in-ddd). Le somiglianze tra una specifica e un servizio di dominio possono essere molto simili, specialmente se la regola che si sta tentando di applicare/dimostrare si basa sull'ottenimento di informazioni tramite un repository prima. –
Si passa una specifica a un repository, ad es. tramite FindOne (specifica) o FindAll (specifica).Se si inserisce un repository in una specifica, si rischia di creare un riferimento circolare che potrebbe causare problemi. – autonomatt