Al momento il mio team ha un progetto con un oggetto di accesso ai dati così composto:
public abstract class DataProvider
{
public CustomerRepository CustomerRepo { get; private set; }
public InvoiceRepository InvoiceRepo { get; private set; }
public InventoryRepository InventoryRepo { get; private set; }
// couple more like the above
}
Abbiamo classi non astratte che ereditano da DataProvider e il tipo di "CustomerRepo" che viene istanziato è controllato da quella classe figlio.
public class FloridaDataProvider
{
public FloridaDataProvider()
{
CustomerRepo = new FloridaCustomerRepo(); // derived from base CustomerRepository
InvoiceRepo = new InvoiceRespository();
InventoryRepo = new InventoryRepository();
}
}
Il nostro problema è che alcuni dei metodi all'interno di un determinato repository trarrebbero vantaggio dall'avere accesso agli altri repository. Ad esempio, un metodo all'interno di InventoryRepository deve accedere ai dati del cliente per effettuare alcune determinazioni, quindi è necessario passare un riferimento a un oggetto CustomerRepository.
Qual è il modo migliore per questi repository "fratelli" di essere a conoscenza l'uno dell'altro e avere la capacità di chiamare i reciproci metodi come necessario? Praticamente tutti gli altri repository trarrebbero vantaggio dall'avere CustomerRepo, ad esempio, perché è da dove vengono selezionati nomi / telefoni / etc, e questi elementi di dati devono essere aggiunti ai vari oggetti che vengono restituiti dagli altri repository.
Non posso semplicemente creare un nuovo oggetto "CustomerRepository" all'interno di un metodo all'interno di un repository diverso, perché potrebbe non essere il CustomerRepository di base che deve effettivamente essere eseguito.