Creando BLL - Lógica de Negocio

4 views
Skip to first unread message

Carlos Admirador

unread,
Sep 30, 2022, 2:28:47 AM9/30/22
to AltNet-Hispano
Sería una buena práctica crear clases BLL (lógica de negocio) así, creando las instancias de clases DAL (acceso a datos), que son unas cuantas clases DAL?


namespace PROYECTO.Logic.BLL.Usuarios
{
    public class UsuariosBLL:MasterBLL
    {
        readonly IUsuariosDAL _usuariosDAL;        
        readonly IUsuarioIdiomasDAL _usuarioIdiomasDAL;        
        readonly IUsuarioNaturalezaDAL _usuarioNaturalezaDAL;
        readonly IUsuarioHabilitacionesDAL _usuarioHabilitacionesDAL;
        readonly IUsuarioAsignacionesDAL _usuarioAsignacionesDAL;
        readonly IUsuarioAsignacionHabilitacionesDAL _usuarioAsignacionHabilitacionesDAL;
        readonly IUsuariosODSDAL _usuariosODSDAL;        
        readonly IRolAmbitosDAL _rolAmbitosDAL;
        readonly IUsuarioIDSisIntegradosDAL _IDSisIntegradosDAL;
        readonly IDirectoresAyudantesDAL _directoresAyudantesDAL;
        readonly IChequesRestauranteDAL _chequesRestauranteDAL;
        readonly IUsuariosEquipoDAL _usuariosEquipoDAL;
        readonly IUsuarioIDSisIntegradosDAL _usuarioIDSisIntegradosDAL;
               
        public UsuariosBLL()
        {
            _usuariosDAL = new UsuariosDAL();            
            _rolAmbitosDAL = new RolAmbitosDAL();            
            _usuarioIdiomasDAL = new UsuarioIdiomasDAL();
            _usuarioNaturalezaDAL = new UsuarioNaturalezaDAL();
            _usuarioHabilitacionesDAL = new UsuarioHabilitacionesDAL();
            _usuarioAsignacionesDAL = new UsuarioAsignacionesDAL();
            _usuarioAsignacionHabilitacionesDAL = new UsuarioAsignacionHabilitacionesDAL();
            _usuariosODSDAL = new UsuariosODSDAL();
            _IDSisIntegradosDAL = new UsuariosIDSisIntegradosDAL();
            _directoresAyudantesDAL = new DirectoresAyudantesDAL();
            _chequesRestauranteDAL = new ChequesRestauranteDAL();
            _usuariosEquipoDAL = new UsuariosEquipoDAL();
            _usuarioIDSisIntegradosDAL = new UsuariosIDSisIntegradosDAL();        
        }

Carlos Peix

unread,
Oct 1, 2022, 8:17:30 AM10/1/22
to altnet-...@googlegroups.com
Respecto de las buenas prácticas, se me ocurren las siguientes ideas:

Quizás una pequeña mejora podría ser que, en lugar de crear las dependencias en el constructor, las recibas como parámetros. Luego, podrías definir una pequeña clase "factory" o un método de clase en UsuariosBLL para crear el objeto y sus dependencias. El último paso en este refactoring podría ser utilizar alguna herramienta de inyección de dependencias que haga esto automáticamente.

Por otro lado, la cantidad de dependencias DAL me dan como un "smell" aunque no estoy seguro sin conocer el modelo. Esa excesiva cantidad podría tener dos causas:

1) Quizás no estás utilizando el concepto de aggregate de DDD. En un aggregate (entre otras cosas) el ciclo de vida (creación, modificación, eliminación) es común para todos los objetos que lo component, entonces se requiere una sola DAL (repository in términos de DDD) para todo el aggregate.

Ejemplo (imaginando relaciones), si definís que quizás no necesitarías estos DAL:
   _usuarioIdiomasDAL = new UsuarioIdiomasDAL();
   _usuarioNaturalezaDAL = new UsuarioNaturalezaDAL();
   _usuarioHabilitacionesDAL = new UsuarioHabilitacionesDAL();
   _usuarioAsignacionesDAL = new UsuarioAsignacionesDAL();
   _usuarioAsignacionHabilitacionesDAL = new UsuarioAsignacionHabilitacionesDAL();
   _usuariosODSDAL = new UsuariosODSDAL();

... y podrías colocar esas operaciones en este DAL:
   _usuariosDAL = new UsuariosDAL();

Lo mismo podría ser cierto para otros DALs, ya depende del dominio

2) Otra posible causa, aunque más difícil de responder sólo a partir de ese código, es que estés asignando responsabilidades que no pertenecen a UsuariosDAL, en cierta forma, justo lo opuesto al punto 1.

Saludos

----------------------------------
Carlos Peix
Móvil/Whatsapp: +54 911 4406 7571


--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a altnet-hispan...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/altnet-hispano/98e27ff5-b88b-4b1f-a13d-59bccf1caf6bn%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages