Lógica empresarial vs capa de servicio

9

Leí esta respuesta: https://softwareengineering.stackexchange.com/a/234254/173318 corrija mi comprensión.

Las reglas de negocios se refieren a la lista de pasos de negocios en el mundo real (sin códigos).

La lógica de negocios se refiere al proceso de convertir las reglas de negocio en códigos y estos códigos de grupo / tipo tratados como "lógica de negocios".

¿Y para qué se utiliza la capa de servicio? si leo esta respuesta, no suena diferente con la lógica de negocios https://stackoverflow.com/a/4817935/4190539

¿Es la capa de servicio un lugar para que la lógica de negocios y el repositorio se encuentren?

Kakashi
fuente
1
"capa de servicio" es un término genérico, puede ser o contener lo que desee. Esa pregunta SO que mencionó estaba hablando de la "capa de servicio en ASP.NET MVC", que le da al término un enfoque más específico. ¿Estás hablando intencionalmente de esto último? ¿O simplemente te perdiste la diferencia?
Doc Brown
Eso es lo que tengo hasta ahora. pero me encantaría escuchar tu explicación sobre todos ellos.
Kakashi

Respuestas:

11

"Capa de servicio" es un término arquitectónico. Se refiere a una parte del sistema que se encuentra en algún lugar en el medio de una arquitectura de varios niveles , debajo de la capa de interacción del usuario pero por encima de la capa de acceso a datos.

La lógica empresarial se puede implementar en la capa de servicio, haciendo cumplir las reglas comerciales.

Sin embargo, tenga en cuenta que hay casos en los que la lógica empresarial termina en otras capas. Por ejemplo, algunas reglas comerciales se aplican en la capa de interacción del usuario para mejorar la experiencia del usuario (por ejemplo, validadores escritos en Javascript para que pueda verificarlos sin un viaje de ida y vuelta al servidor). Cuando ese es el caso, la capa de servicio generalmente duplicará la aplicación.

Otras reglas comerciales solo se pueden aplicar en la capa de la base de datos, por ejemplo, cuando existen problemas de concurrencia (imagine una aplicación en la que puede consultar un libro de la biblioteca) o problemas de rendimiento (imagine un programa que calcule la comisión anual de un vendedor ocupado, basada en un estructura compleja de tarifas).

John Wu
fuente
¿está bien si tengo un directorio de servicios y contiene clases como lugares donde pongo la lógica de negocios e inyecto el repositorio, otros servicios, validación allí?
Kakashi
Sí, es natural inyectar otros servicios, incluido el acceso a datos, en una capa de servicio; tiene que almacenar datos de alguna manera, y si se escribe correctamente, no sabe cómo hacerlo por sí mismo.
John Wu
el repositorio no debe contener ningún código comercial ¿verdad? Significa que el repositorio debe estar libre de validación, filtro o cualquier otra manipulación de strijg, como strtolower, por ejemplo.
Kakashi
No necesariamente (ya te di dos ejemplos en mi publicación), pero es una buena práctica mover tanta lógica de negocios a la capa de servicio como puedas.
John Wu
oh vale, por cierto, ¿tienes un código de patrón de repositorio que pueda ver?
Kakashi