Ho un progetto e seguo i modelli Repository e UoW. Ho anche un livello di "servizio" che uso anche come livello BL.
Prendendo ad esempio un modello di dominio del cliente, potrei avere informazioni che ho bisogno di recuperare insieme al cliente, quindi nella classe di repository del cliente ho i seguenti metodi:
public CustomerModel Get(int id);
public IEnumerable<CustomerAddressModel> GetAddresses(int id);
public IEnumerable<CustomerOrderModel> GetOrders(int id);
I metodi sopra riportati effettuano una chiamata db standard nelle tabelle pertinenti e vengono richiamati dalla classe di servizio.
Ora ho altri metodi che ho bisogno per il cliente, come ad esempio:
public bool HasReminders(int id);
public bool ForwardedToDebtCollection(int id);
//etc...
Questi metodi non hanno tabelle specifiche ma effettuano una chiamata DB a diverse viste pertinenti.
Vorrei mantenere il codice specifico per db (in particolare le istruzioni SQL) all'interno del livello del repository. Ciò è dovuto anche al fatto che il livello di servizio non ha riferimenti a EntityFramework e Dapper. Questi sono usati esclusivamente nel livello del repository.
La mia domanda:
Devo aggiungere i metodi aggiuntivi al livello di repository e lasciare che il livello di servizio chiami questi metodi, o dovrebbero essere collocati direttamente nel livello di servizio in quanto fanno parte della business logic?