2012-03-19 2 views
0

난 계층화 된 응용 프로그램이 있습니다. 활성 사용자에 대한 정보로 채워진 객체를 반환하는 메소드를 배치 할 위치를 결정하려고합니다. 레이어는 다음과 같습니다현재 사용자의 정보를 반환하는 데 어떤 레이어를 배치해야합니까?

  1. 데이터 액세스 레이어 (엔티티 프레임 워크)
  2. 도메인 레이어 (포항 강판)
  3. UI 레이어 (웹, 모바일 및 Windows)

계층 나는 배치해야 방법? 이것은 방법 :

internal static User ActiveUser() 
    { 
     var name = System.Threading.Thread.CurrentPrincipal.Identity.Name; 
     if (string.IsNullOrEmpty(name)) 
     { 
      return null; 
     } 
     else 
     { 
      using (EfContext db = new EfContext()) 
      { 
       return db.Users.Single(u => u.UserName.ToLower().Equals(name.ToLower())); 
      } 
     } 
    } 

답변

0

내 대답은 ""방법이 있어서는 안 될 것입니다. 적어도 지금은 그렇지 않습니다. CurrentPrincipal 이름을 얻는 것은 도메인 (도메인 서비스)의 기능이거나 DAL이 아닌 별도의 응용 프로그램 서비스 일 수 있습니다.

그러나 도메인에 대해서는 EfContext이 보이지 않아야하며 UI에는 표시되지 않아야합니다. 일반적인 방법은 저장소에 캡슐화하는 것입니다.

따라서 도메인/응용 프로그램 서비스는 저장소 이름을 User으로 "요청"할 수 있습니다.

public User GetUser(string name) 
{ 
    using (EfContext db = new EfContext()) 
    .... 
} 
관련 문제