Es una mala práctica para la capa de servicio para tener métodos que no tienen que ver con la base de datos?
-
28-09-2019 - |
Pregunta
Tengo los métodos siguientes en mi servicio de usuario
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
Usted notará que hay algunos métodos que no tienen que ver con la base de datos, pero sentí que este era un lugar bueno para usarlos.
¿Es esta práctica mala en cuenta?
Nota: Mi capa de repositorio estrictamente se refiere a la base de datos. Mi flujo va.
Base de datos> LINQ (DBML)> capa de repositorio> Capa de Servicio> Controlador (u otro).
Solución
Ejemplo de haber avistado, se parece como una mala práctica. Si ves toda la información que usted está pidiendo desde su capa de servicios está realmente disponible en su propio controlador. ¿Por qué le gustaría límite de la aplicación transversal de obtener esta información?
Sin embargo, no podría ser una razón válida para someterse a una operación en la capa de servicio que no es precisamente tratando con DB.
En su caso yo diría que utilizar una clase de ayuda de algo así en el controlador.
Otros consejos
@Predeep tiene un punto. No ponga los métodos que pertenecen en el webproject en la capa de servicio. Usted se acaba de agregar otra dependencia.
La capa de servicio no se supone que es sólo una capa encima de la capa de repositorio. Podría contener la lógica de la modificación de la información de la base de datos o cualquier otra fuente de datos. Es perfectamente posible agregar otros métodos que no tienen que ver nada con la base de datos. Eso es lo que la capa es para. De lo contrario, usted podría saltar esa capa.