asp.net-mvc-2 - mvc - onion architecture asp net core 2
¿Service Layer vs Business Layer en la arquitectura de aplicaciones web? (9)
Sé que esto puede parecer una tontería, pero me resulta difícil entender la necesidad de una capa de servicio y sus diferencias con la capa empresarial.
Por lo tanto, estamos utilizando asp.net mvc 2 y tenemos una capa de acceso a datos que realiza todas las consultas con la base de datos y luego tenemos la capa empresarial que tiene la lógica empresarial y las validaciones necesarias. Finalmente tenemos la capa de presentación que básicamente tiene todas las vistas. Además, también tenemos algunos ayudantes, DTO y clases de modelos de vista en diferentes carpetas como parte de nuestras bibliotecas. Pero he tratado de leer sobre arquitectura y parece que la capa de servicio es una parte importante de una arquitectura.
Todo lo que entiendo es que una capa de servicio es algo que llama a todas las funciones. ¿Pero realmente no puedo ver la necesidad de la capa de servicio en nuestra aplicación? O puede que ya esté allí y no lo veo ... ¿Alguien puede explicar con un ejemplo lo importante que es una capa de servicio? ¿En qué se diferencia de una capa de negocios porque de lo que he leído parecen bastante similares? Si es en el primero necesario en absoluto? Todo lo que intentamos hacer es diseñar nuestra aplicación de la mejor manera posible, ¿cuáles son sus pensamientos y experiencias al respecto?
Desde mi perspectiva, una capa de servicio le permite aislar su capa de presentación de su capa de negocios, de la misma manera que la capa de acceso a datos y negocios lo aísla de la forma en que conserva los datos.
Dentro de la capa de negocios, pondría cosas que son fundamentales para su "negocio". Un ejemplo ideado (y probablemente mal concebido) sería que ese sea el lugar donde, por ejemplo, se produzcan descuentos en los precios de un producto.
La capa de servicio le permite separar aún más la interfaz de la empresa. O incluso intercambiar otras capas de negocios en función de los escenarios cambiantes del negocio.
Sin embargo, no todas las aplicaciones necesitan una (hay muchas variables que entran en esa determinación), demasiada arquitectura puede introducir complejidades que su equipo puede no necesitar.
Eche un vistazo a lo que Randy Stafford dice acerca de Service Layer en el libro "P of EAA" http://martinfowler.com/eaaCatalog/serviceLayer.html
Una capa de servicio define el límite de una aplicación [Cockburn PloP] y su conjunto de operaciones disponibles desde la perspectiva de la interconexión de las capas de cliente. Encapsula la lógica empresarial de la aplicación , controla las transacciones y coordina las respuestas en la implementación de sus operaciones.
En algunos diseños, la capa de presentación no utiliza la capa de servicio.
La capa de servicio es llamada por otras aplicaciones que desean utilizar las capas de acceso de datos y negocios en la aplicación.
En cierto modo, la capa de servicio es otro front-end separado de la capa de presentación.
Vea el diagrama arquitectónico aquí. Los usuarios acceden a la aplicación a través de la capa de presentación. Y los sistemas externos acceden a la aplicación a través de la capa de servicios. La capa de presentación y la capa de servicios se comunican con la fachada de la aplicación en la capa empresarial.
Como ejemplo de lo que esos otros "sistemas externos" podrían ser, los servicios web y los servicios WCF llaman a la capa de servicio. Alguna otra aplicación web podría llamar a la capa de servicio de esta aplicación en una llamada de servicio web. Esta sería una forma de garantizar que ambas aplicaciones apliquen la misma lógica de negocios y que los cambios realizados en la lógica de negocios se reflejen en ambas aplicaciones.
Como señala Chris Lively, uno no debería dejarse llevar por la creación de capas. Recomendaría solo crear las capas que serían útiles en su aplicación. En mi experiencia, la necesidad de una capa de servicio no es frecuente, pero la necesidad de una capa de negocios es muy frecuente.
La capa de servicio generalmente se construye en términos de operaciones discretas que deben admitirse para un cliente.
Por ejemplo, una capa de servicio puede exponer la creación de una cuenta. Mientras que la capa empresarial puede consistir en validar los parámetros necesarios para crear una cuenta, construir objetos de datos para persistir, etc.
A menudo, la capa de servicio utiliza un código de estilo de secuencia de comandos o de transacción para organizar las capas de negocio y / o lógica.
Sabiendo esto, puede que se dé cuenta de que su Capa de negocios también es realmente una Capa de servicio. En algún punto, el punto a partir del cual está haciendo esta pregunta es uno de esos puntos, la distinción es principalmente semántica.
Podrías encontrar el término Arquitectura Astronauta interesante.
El punto es, no te dejes atrapar por todas estas "capas" que la gente usa. Cada vez que tengas otra capa en la aplicación, tiene que haber un propósito en ella.
Por ejemplo, algunas personas combinan con éxito los conceptos de una capa de acceso a datos y lógica empresarial en una sola. No es adecuado para todas las soluciones, pero funciona perfectamente para muchas de ellas. Algunas personas pueden incluso combinar Presentación con Negocios ... lo cual es muy importante en muchos círculos pero, nuevamente, puede ser perfecto para la necesidad en cuestión.
Básicamente, el problema que está resolviendo debe dictar la estructura de la aplicación. Si otras aplicaciones necesitan integrarse con las suyas, entonces es posible que deba agregarse una capa de servicio. Esto podría tomar la forma de simples formularios web en los que otros pueden publicar datos o podría ir más lejos para estar completo en servicios web. Incluso puede haber situaciones en las que desee que la capa de servicio sea la ubicación principal para múltiples presentaciones.
Puede volverse tan complicado como quiera, pero una buena regla general es que sea sencillo hasta que las complicaciones sean necesarias.
Sé que este subproceso es antiguo, pero una cosa útil que he hecho en la capa de Servicio es manejar las transacciones (la Capa de Negocios no debería necesitar saber cómo manejar las reversiones, el orden de las operaciones, etc.).
Otra cosa que he hecho es usarlo para traducir entre entidades de dominio y DTO. La capa de negocio trata con el modelo de dominio, pero he pasado los datos a la capa de presentación en forma de DTO (en algunos casos no fue práctico exponer todo el modelo de dominio a la capa de presentación por varias razones) por lo que la capa de servicio maneja este mapeo.
En última instancia, veo que la capa de negocios es más detallada, mientras que la capa de Servicio puede ser más gruesa, ya que podría realizar múltiples operaciones en el BLL y ordenar llamadas dentro de una llamada de servicio.
Sí, y también me gustaría señalar que la capa de servicio es un buen lugar para la autenticación, tanto basada en roles como en usuarios.
Sencillo. Para exponer su lógica empresarial a un cliente, use una capa de servicio. Pregúntese:
Al cambiar la lógica de negocios, ¿debería cambiar la capa de servicio? Si la respuesta es "no siempre", entonces se necesita una capa de servicio.
Se trata de desacoplar su aplicación en partes independientes, cada una definida por el requisito de hacer un trabajo realmente bien.
Esto le permite aplicar patrones de diseño especializados y mejores prácticas a cada componente.
Por ejemplo, el trabajo de la capa empresarial es implementar la lógica empresarial. Parada completa Exponer una API diseñada para ser consumida por la capa de presentación no es su "preocupación".
Este rol del paso entre es mejor realizado por una capa de servicio. La factorización de esta capa especializada le permite aplicar patrones mucho más especializados a cada componente individual.
No hay necesidad de hacer cosas de diseño de esta manera, pero la experiencia acumulada de la comunidad indica que resulta en una aplicación que es mucho más fácil de desarrollar y mantener porque sabe exactamente lo que se espera que haga cada componente, incluso antes de comenzar a codificar. la aplicación.
Cada capa debe hacer un trabajo realmente bien. El papel de ir entre lo que realiza la capa de servicio es un trabajo bien definido, y esa es la razón de su existencia: es una unidad de complejidad que se diseña de la misma manera una y otra vez, en lugar de tener que reinventar la rueda. Cada vez, para mangle este papel con la lógica de negocios donde no pertenece. Piense en la capa de servicio como un componente de mapeo. Es externo a la lógica de negocios y no pertenece a sus clases, ni tampoco a los controladores.
Además, como resultado de ser excluido de la lógica empresarial, obtiene objetos comerciales más simples que son más fáciles de usar por otras aplicaciones y servicios que consume el "negocio".
ASP.NET MVC no es más que una plataforma que le permite escribir sus aplicaciones como componentes especializados.
Como resultado de esta creciente comprensión de cómo especializar los componentes, los programas están evolucionando de un tazón de sopa y espagueti primordial a algo diferente y extraño. La complejidad que pueden abordar, mientras siguen utilizando estructuras simples, está aumentando. La evolución se está poniendo en marcha. Si la vida es algo para pasar, esto tiene que ser bueno, así que mantén la bola rodando.