Conectar una capa empresarial y un repositorio utilizando la unidad de patrón de trabajo

8

Mi pregunta es similar a esta del Desbordamiento de pila: ¿Cuál es la forma correcta de utilizar la Unidad de trabajo / Repositorios dentro de la capa empresarial?

Escenario:

  • solución .Net
  • IRepository se utiliza para recuperar objetos de DB
  • IUnitOfWork se utiliza para permitir transacciones a través de múltiples repositorios

Esto tiene sentido para mí y he implementado algo en este sentido que funciona bien. Ahora quiero introducir una capa de lógica empresarial y tengo problemas para organizar los tres elementos (BLL, UnitOfWork y Repository) en mi mente.

Mi entendimiento:

  • Repositorio: recuperación de datos, manipulación
  • UnitOfWork - persistencia
  • BLL: lógica relevante para el negocio ('mundo real') (¡no me gusta ese término!)

Considere que tenemos una interfaz de ASP.Net MVC.

¿Cómo se ve un BLL y cómo se ve el controlador MVC que lo usa?

Para referencia: Me pregunto si quizás mi implementación de IUnitOfWork / IRepository podría ser la causa subyacente de mi confusión.

public class IRepository<T> 
{
    private IObjectSet<T> objSet;
    public IRepository<T>(IUnitOfWork uow)
    {
        objSet = uow.CreateObjectSet<T>();
    }

    public IQueryable<T> Add(T entity)
    {
        objSet.Add(entity);
    }
    //etc. etc. for delete, attach, getall
}

Siento que si tengo un BLL, debería pasarle el IUnitOfWork, para que pueda usarlo para crear las instancias de IRepository que necesita. Pero, ¿cómo la BLL (DLL separada de la interfaz de usuario) "sabrá" qué implementación de IRepository construir?

    
pregunta glosrob 28.09.2011 - 00:18

1 respuesta

5

Tenga en cuenta que solo tengo poca experiencia con .NET framework y que esta respuesta solo se relaciona con la parte de arquitectura de su pregunta.

Hasta donde lo entendí, básicamente estás aplicando los siguientes patrones arquitectónicos en tu aplicación:

Capas: Parece que tienes una capa de persistencia (Patrón de repositorio), una capa de lógica empresarial y una capa de vista.

Model-View-Controller: Este patrón se aplica en la capa de vista utilizando ASP.NET MVC.

  

Supongo que la pregunta es: ¿qué aspecto tiene un BLL y qué aspecto tiene el controlador MVC que lo usa?

En primer lugar, esta arquitectura está destinada a aplicaciones empresariales a gran escala , como lo mencionó Robert Harvey en su comentario a su pregunta. Lo que es característico para tales sistemas es que la lógica del dominio (que usted encapsuló en la capa de lógica de negocios) debe ser accesible a través de varias interfaces.

Considere Twitter, por ejemplo: Twitter podría tener una capa de lógica empresarial que proporciona servicios para registrar y validar usuarios, publicar tweets y mucho más. En la parte superior de esta capa de lógica de negocios, podrían existir otros componentes en la capa de vista, por ejemplo. una interfaz web y un componente de servicio web. Dado que toda la lógica de negocios está encapsulada en la capa de lógica de negocios, puede seguir el principio DRY y mejorar la capacidad de mantenimiento y otros atributos de calidad.

Para volver a su pregunta, debe encapsular la lógica empresarial y el acceso a los datos en el BLL. El controlador (piense en MVC) debe hacer uso del BLL y no debe tener acceso directo a la base de datos. Considere la capa de vista como una interfaz para su aplicación.

  

Siento que si tengo un BLL, debería pasarle el IUnitOfWork, para que pueda usarlo para crear las instancias de IRepository que necesita. Pero, ¿cómo la BLL (DLL separada de la interfaz de usuario) "sabrá" qué implementación de IRepository construir?

El BLL debe saber qué repositorio (fuente de datos?) utiliza. Las capas de arriba no deberían controlar esto. Nuevamente, considere la capa de vista solo como una interfaz para la lógica de su negocio.

Si no necesita la sobrecarga de una capa de lógica empresarial, también puede elegir usarla únicamente para el acceso a datos en forma de objetos de acceso a datos .

Espero que esto haya ayudado a aclarar las responsabilidades de los diversos componentes.

    
respondido por el BenR 21.10.2011 - 22:28

Lea otras preguntas en las etiquetas