Ho studiato architettura della cipolla per un paio di giorni. Capisco che le dipendenze dovrebbero sempre andare verso il centro e come usare l'iniezione di dipendenza per raggiungere questo obiettivo. Ma ho un paio di domande che ancora non riesco a capire.come implementare servizi e repository sull'architettura cipolla?
Un modello (o entità) può fare riferimento a un'interfaccia di repository oa un'interfaccia di servizio?
Esempio: un'entità
Order
ha un rapportoDeliveryCity
stabilita attraversoOder.DeliveryZip
proprietà, che è non una chiave esterna, ma è unico. Per ottenere il City per una chiusura lampo, devo chiamareICityRepository.FindByZip(zip)
Ho il seguente codice nel mio modello
class Order { . . . [Inject] public ICityRepository CityRepository { get; set; } private City _dCity; public City DeliveryCity { get { if (_dCity == null) _dCity = this.CityRepository.FindByZip(this.DeliveryZip); return _dCity; } } . . . }
Quali sarebbero i problemi del codice di cui sopra? Dovrebbe invece usare un servizio di dominio?
Le implementazioni dei servizi di dominio devono essere definite all'interno del core o del livello infrastruttura?
Ha perfettamente senso! Mi sto chiedendo "come potrei perdere questo?"! Grazie! – svallory
Questo è un errore. La fabbrica DDD non è responsabile per la ricostituzione. La riconsiderazione è la vita media di un oggetto, la fabbrica si occupa solo dell'inizio della vita. Si prega di vedere questa risposta: http://stackoverflow.com/a/10264669/625332 – Dmitry
Non sono d'accordo. Le fabbriche sono utilizzate per creare istanze di un oggetto. Possono essere all'inizio del ciclo di vita di un oggetto o utilizzati per la ricostituzione. Possono essere della stessa classe con due metodi o due classi diverse. Ad ogni modo, sono d'accordo sul fatto che ci sia una differenza nel modo in cui la fabbrica si comporta in ogni caso. Di solito ho lo stabilimento di ricostituzione come dipendenza del repository che delega alla fabbrica per creare e ricostituire la nuova istanza con i dati recuperati dall'archivio dati. Per ulteriori informazioni, vedere Evans pg 145: "Ricostituzione di oggetti memorizzati" – SonOfPirate