Domanda

Esempio: il tuo database ha una vista SQL denominata "CustomerDersonhold". Questa vista restituisce un mix filtrato di campi specifici e dati ordini. Devi prendere i dati da questa vista nell'applicazione. In che modo l'accesso a tale vista si inserisce nel modello di repository? Creeresti un "CustomerOrderSholdRepository"? Una vista di sola lettura come questa è considerata una radice aggregata?

È stato utile?

Soluzione

Preferirei separare il repository di lettura, preferibilmente persino cambiare il suo nome in Finder o Reader, il repository è pensato per l'utilizzo del dominio non per interrogare i dati di sola lettura, puoi fare riferimento a Questo articolo e questo che spiega l'utilizzo del repository di forme separate di Finder.

Consiglierei anche la separazione del modello di lettura dall'architettura del modello di scrittura CQRS e

Questa architettura consente di separare il modello di lettura dal modello di scrittura anche in termini di archiviazione dei dati e l'uso di un approvvigionamento di eventi.

Per una soluzione centrale è possibile utilizzare alcuni concetti CQRS senza la complessità di separazione del database semplicemente separando il repository dai Finder, leggi questo inviare

Per un campione di questo tipo di soluzione (utilizzare lo stesso database ma separare i repository del modulo Finders) questo campione

Altri suggerimenti

I tuoi dati di sola lettura verrebbero considerati oggetti di valore nel mondo DDD.

In genere inserisco i metodi di accesso per gli oggetti di valore nei repository esistenti fino a quando non ha senso creare un repository separato. È simile a un metodo che potrebbe restituire un elenco statico di stati da utilizzare in un modulo di indirizzo:

IAddressRepository
{
  Address GetAddress(string addressID);

  List<string> GetStates(string country);
}

Penso che vada bene avere un repository separato come "CustomerDersonholdRepository". L'interfaccia del repository rifletterà il fatto che gli oggetti sono leadonly (non definendo il metodo di salvataggio/aggiunta/makepersistent).

Da Come scrivere un repository:

... Ma c'è un'altra strategia che mi piace molto: più repository. Nel nostro esempio di ordinamento non c'è motivo per cui possiamo avere due repository: test e autentici. Gli assegnati rappresentano un elenco contenente ogni singolo ordine nel sistema, i registri Surcharged rappresentano un sottoinsieme di esso.

Non chiamerei oggetto restituito una radice aggregata. Gli aggregati sono per coerenza, scambio di dati e cicli di vita. I tuoi oggetti non hanno nessuno di questi. Sembra che non possano anche essere classificati come oggetti di valore ("caratteristica o attributo"). Sono solo lezioni autonome.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top