Stiamo cercando nella creazione di un nuovo progetto e sono desiderosi di esplorare utilizzando i modelli di repository e livello di servizio, al fine di creare è senza bloccare il codice abbinato che è completamente verificabile tramite repository finte.C# Servizi Strato Design Pattern
prega di vedere sotto l'idea di architettura di base. Utilizzeremo le interfacce per descrivere i repository e inserirli nei livelli di servizio per rimuovere eventuali dipendenze. Quindi utilizzando autofac, i servizi verranno cablati in fase di runtime.
public interface IOrderRepository
{
IQueryable<Order> GetAll();
}
public class OrderRepository : IOrderRepository
{
public IQueryable<Order> GetAll()
{
return new List<Order>().AsQueryable();
}
}
public class OrderService
{
private readonly IOrderRepository _orderRepository;
public OrderService(IOrderRepository orderRepository)
{
_orderRepository = orderRepository;
}
public IQueryable<Order> GetAll()
{
return _orderRepository.GetAll();
}
}
public class EmailService
{
public void SendEmails()
{
// How do I call the GetAll method from the order serivce
// I need to inject into the orderService the repository to use
}
}
Ci sono alcune domande che stiamo avendo problemi a trovare il modo migliore di procedere.
1) Qualora il servizio sia riproducendo i metodi CRUD, così come appare possiamo essere riproducendo codice con alcun beneficio reale. O l'interfaccia utente dovrebbe chiamare direttamente i repository?
2) Cosa succede quando un servizio ha bisogno di chiamare un altro servizio. Nel nostro esempio precedente, se il servizio di posta elettronica ha bisogno di ricevere tutti gli ordini, inseriamo il servizio di ordine nel servizio di posta elettronica?
Spero che questo ha un senso
servizio e-mail non deve essere a conoscenza di servizi come OrderService, è necessario mediatore di lavorare con entrambi i servizi e-mail && ordine in modo sarebbero stati disaccoppiati – sll
cosa fa il tuo servizio di ordine fare? Basta incapsulare il OrderRepository? O fa di più, dall'aspetto del tuo codice sembra solo un livello ridondante. – gideon
Vorrei fare un'altra domanda. È opportuno esporre IQueryable al di fuori del limite del repository? Per me no. È un'astrazione che perde. –