2012-10-24 4 views
2

(나는 2 가지 질문을 할 것이다.)레이어 및 요소?

우리는 3 개의 레이어를 사용합니다 : Bl, Dal, UI.

enter image description here

우리는 모든 개체에 대한 하나의 큰 BL, DAL를 구축하고 싶지 않았다.

그래서 우리는 AgentsLeads에 대해이 구조를 만들었습니다.

지금 내가하는 방법을 작성해야 말할 수 :

public Agent GetAgentByLead(Lead leadObj) 
{ 
} 

1이이 기능에 있어야 않는 질문 번호 : AgentsBL 또는 LeadsBL?

질문 # 2

내가 엔티티 프레임 워크를 사용하고 싶은 말은 수 있습니다.

쿼리가 될 수 있습니다

var activeAgents= context.Agents.Where(c => c.ACTIVE).ToList(); 

이 줄은 myPage.aspx.cs 파일을 실행할 수 있습니다.

이렇게 여기서은 레이어입니까? 컨텍스트는 어디에 있습니까?

난 그냥보고 해달라고하는 방법 EF 거래 (내 첫 번째 질문 등) 층 어떤 도움

와 주 시겠어요?

답변

3

일반적으로 사용되는 패턴의 Repository Pattern이다 고려, 아이디어는 기본적으로 직접 결코 그래서 문맥을 캡슐화하는 저장소를 만들 것입니다 그것을 사용 ...

나는 일반적인 CRUD 방법이 일반적인 저장소를 선호하지만, 또한 같은 있습니다

IEnumerable<T> FindAll(IQuery<T> query); 

을 따라서가 아니라 특정 쿼리를 수행하는 각 개체 유형에 대한 고유 한 저장소를 만들 필요 , 요 ur GetAgentByLead 당신은 그 논리를 질의로 감싸고 그 문맥을 전달하므로 질의, 저장소 및 컨트롤러 (MVC라고 가정)는 서로 분리되어 있고 서로 의존하지 않습니다.

예 쿼리 객체는 될 것 같은 뭔가 :

public interface IQuery<T> 
{ 
    IEnumerable<T> Execute(IContext context); 
} 

public class FindAllUsersInGroupQuery : IQuery<User> 
{ 
    public int GroupId {get; set;} 

    IEnumerable<User> Execute(IContext context) 
    { 
     return context.DoSomeQueryForGettingUsers(GroupId); 
    } 
} 

당신이 당신의 쿼리, 저장소를 조롱하고 당신이 원한다면 또한 거대한 데이터 접근 클래스와 끝까지 그나마 컨트롤러를 테스트 할 수 있습니다 이런 식으로하는 유지하기가 어렵다.

1

1) 이는 자체 생성 된 문제이므로 각 개체마다 DAL을 갖는 것이 관례 또는 좋은 생각이 아닙니다. 하지만 그들이 너무 커서 당신이 그들을 나누고 싶다고 가정하면, GetAgentForSomething()은 AgentsDAL에 속해 있다고 말할 수 있습니다. 그리고 나서 그것은 리드에 의존하게 될 것입니다. 순환 종속성을주의해야합니다. 별도의 DAO 및 Domain 클래스를 정의해야 할 수도 있습니다.

2) context.Agents.Where(...)은 레이어링을 우회합니다. 당신이 그것을 구글은 정보의 부하를 찾을 경우 AgentsDAL.GetActiveAgents()

이 이런 종류의 물건에 대한
+0

AgentsDAL.GetActiveAgents()는 나의 첫 번째 예제와 같으며 BL 호출을 무시합니다. 여기서 EF 전화는 어디 있습니까? 감사. –

+0

그 호출은 BL에 있어야하거나 가질 수 있습니다. –

관련 문제