2009-08-10 5 views
5

올바른 용어를 사용하고 있는지 확실하지 않지만 3 계층 시스템을 설정하는 방법에 대해서는 약간 혼란 스럽습니다.데이터 액세스 계층 및 비즈니스 개체

내 DB에 사용자 테이블이 있다고 가정 해 보겠습니다.

내 DAL에는 DB에 procs를 저장하여 삽입, 업데이트, 삭제하는 UserDB 클래스가 있습니다. 또한 UserDB에서 User 객체를 반환하고 전달하는 데 사용되는 UserDetails 클래스가 있습니다.

이제 비즈니스 로직 레이어에서 어떻게 사용하는지 모르겠습니다. 사용자에게 다른 BLL 객체 클래스가 필요합니까? 그렇다면 중복되지 않습니까? 또는 BLL 전체에서 UserDetails 클래스를 사용합니까?

답변

3

도메인 주도 디자인 (Domain Driven Design)이라는 개념을 찾아보십시오. 가장 중요한 것은 데이터베이스뿐만 아니라 팩토리뿐만 아니라 저장소 패턴 (예 : UserDB 클래스)을 데이터베이스의 어댑터로 사용하는 것입니다. 비즈니스 오브젝트 또는 도메인 오브젝트는 비즈니스 로직을 통합하고 다른 비즈니스 오브젝트와의 상호 작용을 처리 할 수 ​​있습니다.

어떤 기술을 사용하고 있습니까? ActiveRecord와 같은 것이 아마 당신을 많이 도울 수 있습니다.

2

일반적으로 BLL에는 비즈니스 규칙이 적용됩니다. 예를 들어 일반 콜센터 직원이 새 서비스에 대해 10 % 할인을 제공하고 관리자는 20 % 할인을 제공 할 수 있습니다.

// Pseodocode 
double Discount 
{ 
    set 
    { 
     if (value > 10% AND Employee Is Not Manager) then throw Exception 
     if (value > 20%) then throw Exception 
     discount = value; 
    } 
} 
0
당신은 설계를 사용할 수 있습니다

:

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() 

참고 : BL에서 데이터를 전송하는 동안 비즈니스 엔티티가에 DB 법인 전환 (PL)에 당신은 같은 것을 간다 당신의 BLL의 비즈니스 규칙을 것이다 PL에서 thu 데이터를 루프하려는 경우 필요합니다.

관련 문제