2009-06-11 5 views
0

데이터베이스의 각 테이블에 대한 액세스 방법을 포함하는 비즈니스 논리 계층 클래스가 있습니다. 꽤 많은 테이블이 있기 때문에 엔티티 (코딩 할 때 더 쉽게 액세스 할 수 있도록)별로 메소드를 그룹화하기 위해 구조를 재구성하려고합니다. 그래서에서이 : 이것에클래스를 하위 클래스로 분할

BLL.Database MyDB = new BLL.Database(); 
BLL.Entity.User MyUser = Database.UserGetById(42); 

: 내가 함께, 가능하면 비 정적으로 유지하기 위해 클래스를 싶습니다

BLL.Database MyDB = new BLL.Database(); 
BLL.Entity.User MyUser = Database.User.GetById(42); 

모든 클래스 '부분'도 (나 추가 할 수 있도록 주 생성 클래스에 대한 추가 메소드). 이것을 달성하기위한 나의 선택은 무엇입니까? 현재 레이아웃은 다음과 같습니다.

namespace BLL 
{ 
    public partial class Database 
    { 
     // private members.. 
     // constructor 

     #region User 
     public IQueryable<BLL.Entity.User> UserGetAll() 
     { 
      // ... 
     } 

     public BLL.Entity.User UserGetById(int UserId) 
     { 
      // ... 
     } 

     public void UserSave(ref BLL.Entity.User user) 
     { 
      // ... 
     } 

     public void UserDelete(int userId) 
     { 
      // ... 
     } 
     #endregion 

     // More sets of methods for other entities in database here.. 
    } 
} 

실현 가능합니까?

namespace BLL 
{ 
    public partial class Database 
    { 
     private _User; 
     public User 
     { 
      if (_User == null) 
      { 
       _User = new User(); 
      } 
      return _User; 
     } 

     // Other data access classes here.. 
    } 

    public partial class User 
    { 
     public IQueryable<BLL.Entity.User> GetAll() 
     { 
      // ... 
     } 

     // GetById, Save & Delete methods here.. 
    } 
} 

감사합니다.

답변

1

예, 가능합니다. 사실 나는 그렇게 많은 것을 구현했습니다.

물론 Linq에 대해 SQL을 사용하는 것으로 들었습니다. 대신에 이것을 사용하기 시작 했으므로 다른 옵션으로 확인해 볼 수 있습니다.

+0

이 BLL은 Linq-to-SQL의 래퍼입니다. 모든 Linq 데이터 컨텍스트 엔티티를 스테이트리스 poco 클래스로 연결 해제합니다. – Nick

2

partial과는 별도로 레이아웃이 좋게 보입니다. partial 클래스가 모두 같은 어셈블리에 있어야하므로 partial이 클래스를 확장 가능하게 만들지는 않을 것이라고 생각합니다.

더 나은 해결책은 extension methods을 만드는 것입니다.

관련 문제