No conozco ningún ejemplo real para presumir, porque creo que se me ocurrió el controlador de las aplicaciones MVC -> servicio -> esquema de capas de repositorio basado en preguntas aleatorias y respuestas que encontré por navegando SO.
Sin embargo, lo que puedo ofrecerle es un ejemplo de cómo organizar las viñetas que enumera en cómo encajarían en la forma en que he estructurado mi capa de servicio. Puede que esta no sea la mejor manera, pero así es como estoy haciendo mi aplicación de mvc a gran escala.Esto debería darle una idea de cómo estructurarlo en su propia aplicación
Mi capa de servicio combina una clase de servicio por unidad de negocio. Entonces, si mi aplicación tiene proyectos, y cada proyecto tiene una persona, tendría una clase ProjectService y una clase PersonService.
Según la descripción de cómo funcionan los controladores, las acciones de mi controlador funcionan de la siguiente manera.
1) Obtenga la información del usuario actual y llame al método de autorización de la clase de servicio apropiada. Entonces, si el usuario intenta modificar los detalles de un proyecto, pasaría la identificación del usuario y el ID del proyecto al método AuthorizeUser de ProjectService. Esto significa que si cambio la forma en que autorizo a los usuarios para proyectos, solo tengo que cambiar el método de autorización y no todos los controladores.
2) Los modelos de vista se crean, guardan y destruyen en la capa de servicio. La capa de servicio toma el modelo de vista, lo valida (genera una excepción o resultado de validación si falla) y luego lo convierte en un objeto de datos, que luego pasará al repositorio para guardarlo. También solicita el objeto de datos del repositorio, lo convierte en un modelo de vista y lo devuelve al controlador.
3) El registro de todas las acciones ocurre en la capa de servicio. Esto puede ser automático en función de la acción que se presenta (intentar guardar un objeto en el archivo db) o su controlador puede llamar explícitamente a la capa de servicio para registrar la acción.
El objetivo de todo esto es consolidar la funcionalidad común en una capa fácil de mantener. Si cambia la forma en que su modelo de vista se convierte en DTO, es muy fácil saber dónde hacer el cambio y hacerlo una vez. Si necesita cambiar su registro, acceso de usuario o incluso si desea cambiar la forma de recuperar ciertos datos de los repositorios, es un área simple para cambiar en lugar de tener que buscar a todos sus controladores y modificarlos directamente.
Editar: Esto mantiene los controladores pequeños ya que solo contienen unas pocas llamadas a la capa de servicio y eso es todo (Autorizar, realizar acción, Mostrar vista). End Edit
Finalmente, el sitio web asp.net tiene un tutorial para realizar la validación en una capa de servicio. Ese tutorial se puede encontrar here.
Estoy contemplando esta respuesta. Me gusta la idea de la autorización de clase de servicio. – taudep
Acabo de ver el enlace que editó para agregar. Eso es realmente útil. Gracias por publicar eso. – taudep
Con el artículo vinculado que ha enviado, están realizando llamadas AddModelError antiguas para su validación. Me pregunto si existe una manera de incorporar la validación más reciente de Anotaciones de datos. (Sin embargo, hay reglas de validación que escribo que no se asignan a los atributos.) – taudep