E 'cattiva pratica per il livello di servizio di avere metodi che non si occupano con il database?
-
28-09-2019 - |
Domanda
devo seguenti metodi nel mio User Service
Public Interface IUserService
Sub AddUser(ByVal claimedidentifier As String, ByVal notes As String)
Function GetAllUsers() As IList(Of User)
Function GetUserByID(ByVal id As Integer) As User
Sub UpdateUser(ByVal user As User)
Sub SubmitChanges()
''# Below are methods that do not require database calls.
Function GetUserIPAddress() As String
Function GetUserBrowser() As String
Function GetUserOperatingSystem() As String
Function GetUserSubDomain() As String
End Interface
noterete che ci sono alcuni metodi che non riguardano il database, ma ho sentito che questo era un buon posto per usarli.
E 'questa pratica male considerato?
Nota: il mio strato repository si occupa strettamente con il database. Il mio flusso va.
Database> LINQ (DBML)> Livello Repository> Servizio Livello> Controller (o altro).
Soluzione
Esempio che avete avvistato, sembra una cattiva pratica. Se si vede tutte le informazioni che ti stai chiedendo dal vostro livello di servizio è effettivamente disponibili sul controller stesso. Perché vorreste limite dell'applicazione croce per ottenere queste informazioni?
Per quanto ci potrebbe essere un valido motivo per un intervento sul livello di servizio che non è esattamente a che fare con DB.
Nel tuo caso direi di usare una classe di supporto di qualcosa di simile a controller.
Altri suggerimenti
@Predeep ha un punto. Non mettere metodi appartenenti al webproject nel livello di servizio. Si sono appena aggiungendo un altro dipendenza.
Il livello di servizio non dovrebbe essere solo uno strato sulla parte superiore dello strato di repository. Potrebbe contenere la logica di modificare le informazioni dal database o di qualsiasi altra fonte di dati. E 'perfettamente bene di aggiungere altri metodi che non hanno nulla a che fare con il database. Questo è ciò che lo strato è per. In caso contrario, si potrebbe saltare quel livello.