2009-08-10 14 views
5

Non sono sicuro se ho la terminologia corretta, ma sono un po 'confuso su come configurare il mio sistema a 3 livelli.Data Access Layer e Business Objects

Diciamo che ho una tabella di utenti nel mio DB.

Nel mio DAL, ho una classe UserDB che chiama proc memorizzati nel DB per inserire, aggiornare, cancellare. Ho anche una classe UserDetails che viene utilizzata in UserDB per restituire e passare oggetti.

Così ora non sono sicuro di come utilizzarlo nel mio Business Logic Layer. Ho bisogno di un'altra classe di oggetti BLL per gli utenti? Se così fosse, non sarebbe ridondante? Oppure uso semplicemente la classe UserDetails nel mio BLL?

risposta

3

Cerca un concetto chiamato "Domain Driven Design": la cosa più importante è utilizzare un modello di repository (come la classe UserDB) come adattatore per il database, oltre a una factory. I tuoi oggetti di business o oggetti di dominio, quindi incorporano la logica di business in se stessi e possono gestire le interazioni con altri oggetti di business.

Che tecnologia stai utilizzando? Qualcosa come ActiveRecord può probabilmente aiutarti molto.

2

In genere è necessario applicare le regole aziendali nel BLL. Ad esempio, è possibile consentire ai dipendenti regolari dei call center di offrire uno sconto del 10% sul nuovo servizio, ma consentire a un gestore di offrire uno sconto del 20%. Si avrebbe una regola aziendale nel BLL che va qualcosa come:

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

È possibile utilizzare seguente disegno:

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: durante l'invio dei dati da BL a PL conversione DB Entity to Business entità è richiesto se si desidera eseguire il loop dei dati in PL.

Problemi correlati