in quale livello deve essere inserito il metodo BL "parziale"?

3

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?

    
posta Ivan-Mark Debono 30.08.2016 - 10:08
fonte

1 risposta

2

Sono un sostenitore di mantenere la business logic fuori dal database, e questo include non avere viste che determinano se ci sono promemoria su un cliente.

Questo può accadere nei casi in cui ci sono molti dati e molti utenti concorrenti portano a prestazioni scadenti. Trovo che un discreto caching di dati risolva questo problema, ma non lavoro su dati molto grandi e con un carico di utenti elevato, quindi non sono mai stato in una situazione in cui le prestazioni non potevano essere raggiunte.

Venendo da quella prospettiva non userei un metodo HasReminders(int id) . Vorrei utilizzare un metodo GetReminders(int id) . Simile vorrei caricare i dati per il cliente che conteneva le informazioni possibili sul cliente che viene inoltrato alla riscossione del debito.

Questo avrà il vantaggio di poter visualizzare tutti i promemoria se l'utente li vuole, i dati sono già stati caricati. Altrimenti l'utente dovrà andare su una diversa vista / pagina per caricare i promemoria.

    
risposta data 30.08.2016 - 11:44
fonte

Leggi altre domande sui tag