2009-08-10 10 views
5

No estoy seguro si tengo la terminología correcta, pero estoy un poco confundido sobre cómo configurar mi sistema de 3 niveles.de acceso a datos de capa y Business Objects

Digamos que tengo una tabla de usuarios en mi DB.

En mi DAL, tengo una clase UserDB que las llamadas que almacena procs en él DB para insertar, actualizar, eliminar. También tengo una clase UserDetails que se usa en UserDB para devolver y pasar objetos.

Así que ahora no estoy seguro de cómo utilizar esto en mi capa de lógica de negocios. ¿Necesito otra clase de objeto BLL para los usuarios? Si es así, ¿esto no sería redundante? ¿O simplemente uso la clase UserDetails en mi BLL?

Respuesta

3

Busque un concepto llamado 'Diseño controlado por el dominio': lo más importante es utilizar un patrón de repositorio (como su clase UserDB) como un adaptador para la base de datos, así como una fábrica. Sus objetos comerciales u objetos de dominio, luego incorporan la lógica empresarial en sí mismos y pueden manejar las interacciones con otros objetos comerciales.

¿Qué tecnología se utiliza? Algo como ActiveRecord probablemente pueda ayudarte mucho.

2

Por lo general, haría cumplir las Reglas de negocios en su BLL. Por ejemplo, puede permitir que los empleados regulares del centro de llamadas ofrezcan un descuento del 10% en el nuevo servicio, pero que permita que un administrador ofrezca un descuento del 20%. Se podría tener una regla de negocio en su BLL que dice algo como:

// Pseodocode 
double Discount 
{ 
    set 
    { 
     if (value > 10% AND Employee Is Not Manager) then throw Exception 
     if (value > 20%) then throw Exception 
     discount = value; 
    } 
} 
0

Puede utilizar siguiente diseño:

DAL: 

namespace DAL.Repository 
{ 
    public class UsersRepository 
    { 
     public static IList GetUser(string UserId) 
     { 
      using(MyDBEntities context=new MyDBEntities()) 
      { 
       // it calls SP in DB thru EF to fetch data 
       //here you can also context.user to fetch data instead of SP 
       return context.GetUser(UserId).ToList(); 

      } 
     } 
    } 
} 
BLL 

namespace BLL 
{ 
    public class User 
    { 
     public static IList GetUser(string UserId) 
     { 
      return DAL.Repository.UserRepository.GetUser(UserId); 
     } 
    } 
} 
PL 

    ddlUser.DataTextField = "UserName"; 
    ddlUser.DataValueField = "UserId"; 
    ddlUser.DataSource= BLL.User.GetUser(string.Empty); 
    ddlUser.DataBind() 

Nota: al enviar datos de BL a PL conversión de DB entidad a entidad de negocio es requerido si desea hacer un bucle de datos en PL.

Cuestiones relacionadas