Hay muchos factores que intervienen en la decisión de crear una capa de servicio. He creado capas de servicio en el pasado por las siguientes razones.
- Código que debe ser reutilizado por varios clientes.
- Bibliotecas de terceros para las que tenemos licencias limitadas.
- Terceros que necesitan un punto de integración en nuestro sistema.
- Centralización de lógica comercial duplicada.
Caso 1: está creando una funcionalidad básica que debe ser utilizada por una miríada de clientes diferentes. La capa de servicio incorpora funcionalidades para que diferentes clientes aprovechen su funcionalidad provista de inmediato.
Caso 2: normalmente aloja el código en el espacio de la aplicación, pero está utilizando una biblioteca de terceros para la cual tiene licencias limitadas. En este caso, tiene un recurso que le gustaría usar en todas partes, pero solo un número limitado de ellos. Si lo aloja detrás de un servicio, toda su organización puede usarlo desde sus aplicaciones sin tener que comprar una licencia para cada alojamiento individual.
Caso 3: está creando funcionalidad para que terceros se comuniquen con usted. En su ejemplo, podría configurar un punto final de inventario para permitir que los proveedores le envíen mensajes sobre los envíos de productos entrantes.
Caso 4: ha analizado su código en toda la empresa y descubrió que equipos separados han creado lo mismo (solo implementado de manera ligeramente diferente). Con una capa de servicio, puede elegir los mejores enfoques y ahora puede implementar el proceso de la misma manera en todos los equipos al hacer que llamen al servicio. Otro beneficio de la lógica de centralización es cuando se encuentran errores. Ahora puede implementar la solución una vez y todos los clientes disfrutan del beneficio al mismo tiempo.
Dicho todo esto, hay potenciales negativos para una capa de servicio.
- Agrega complejidad al sistema. Donde antes solo tenía una aplicación para depurar ahora tiene dos. Los problemas de producción requieren verificar la configuración de la aplicación cliente, la configuración de la aplicación de servicio o los problemas de comunicación entre las aplicaciones cliente y servidor configuradas correctamente. Esto puede ser complicado si nunca lo has hecho antes.
- Un punto de falla. Si tiene una interrupción del servicio, todos los clientes se ven afectados. Cuando el código no se implementa de esta manera, el riesgo puede ser menor (aunque hay formas de mitigar esto).
- El control de versiones puede ser más difícil de hacer. Cuando tiene una aplicación que usa un servicio que implementa la interfaz, los cambios se pueden hacer al mismo tiempo entre los dos. Cuando tenga varios clientes ahora, debe administrar quién está en V1, quién está en V2 y coordinar la eliminación de V1 (una vez que sepa que todos se han actualizado a V2).
El punto principal es que no siempre es un slam dunk orientar el servicio de su sistema. En mi experiencia, generalmente es una buena idea (tiendo a estructurar las aplicaciones de esta manera), pero no es una decisión automática. Al final del día, debe sopesar los pros y los contras y tomar la decisión correcta para su situación.
With CRM, Sales and Inventory there will be a lot of CRUD-type use cases of which there is almost always a one-to-one correspondence with Service Layer operations
: si se trata de múltiples interfaces de usuario, entonces, ¿cómo llega el CRUD aquí? Y si no necesitara múltiples interfaces de usuario a pesar de que el CRUD funciona bien con los servicios, todavía no crearía una capa de servicio, si lo entendiera correctamente, y realmente espero que lo haga porque prefiero mantener las cosas simples (la capa de servicio es un lío a mi opinión inexperta)