2011-09-01 2 views
2

저장소 패턴에 대한 기사를 많이 읽었으며 몇 가지 질문이있었습니다. ASP.NET 4.0 응용 프로그램에서이를 구현하려고합니다. 아키텍처는 프레젠테이션 계층, 비즈니스 계층 및 데이터 계층이있는 계층화 된 아키텍처입니다. 나는 MYSQLRepository (데이터 영역)을 생성 한계층화 된 아키텍처의 저장소 패턴

public class MySQLRepository:IOrderRepository 
{ 
    public List<Order> GetOrders() 
    { 

     List<Order> orders = new List<Order>(); 
     orders.Add(new Order(1,"A")); 
     orders.Add(new Order(2,"B")); 

     return orders; 
    } 
} 

내 비즈니스 계층 지금이

public class OrderBL 
{ 
    IOrderRepository orderrep; 
    public OrderBL(IOrderRepository repository) 
    { 
     orderrep = repository; 

    } 

    public List<Order> GetOrders() 
    { 
     return orderrep.GetOrders(); 

    } 
} 

과 같은 http://www.primaryobjects.com/CMS/Article108.aspx

이 문서에서 , 내 질문 프레 젠 테이션 계층에서, 나는 '이다 이 작업을 수행 할 것으로 예상 됨

protected void Page_Load(object sender, EventArgs e) 
{ 
    OrderBL orderBL = new OrderBL(new MySQLRepository()); 
    List<Order> orders = orderBL.GetOrders(); 

    foreach (Order order in orders) 
    { 
     Response.Write(order.OrderId.ToString() + ". " + order.OrderNo + "<br>"); 
    } 

} 

이렇게하려면 프레젠테이션 계층에서 DataLayer를 참조해야합니다. 그게 잘못 아닌가? 이상적으로는 비즈니스 계층을 참조하고 싶을뿐입니다. 내 구현에 문제가 있거나 패턴을 구현하기에 적절한 위치에 있지 않습니다. ASP.NET MVC를 사용하는 많은 예제를 보았지만 제대로 작동하는 것으로 보입니다.

또한 여기에 의존성 주입이 정말로 필요합니까? 도움 SONI

+0

@Eranga, 편집 해 주셔서 감사합니다. 그것을하는 방법을 궁금 해서요 – hangar18

+0

코드 블록을 선택하고'{}'을 클릭하십시오 – Eranga

답변

7

은 생성자 주입을 얻기 위해 IOC의를 unilize하는 것이 좋습니다에 대한

덕분에,이 불필요한 레이어 '참조를 제거합니다.

+0

고마워요. 내 유일한 문제는 매우 간단한 응용 프로그램입니다. 바늘을 때 칼을 사용하고 싶지 않은지 확실하지 않습니다! – hangar18

+1

저장소 잔인함을 찾지 못하면 ioc도 좋지 않을 것이라고 생각합니다. Catle Windsor, Unity 또는 StructureMap을 사용해보십시오. 설치가 매우 쉽습니다. – Dima

0

데이터 계층을 직접 호출하지 않으려면 비즈니스 계층에서 함수를 호출하여 리포지토리를 구조화 할 수 있습니다. 비즈니스 계층은 나머지 부분을 처리 할 수 ​​있습니다.

+1

감사. 패턴이 지나치게 과장된 것인지 확실하지 않습니다. 기본 데이터 소스에서 내 애플리케이션을 추상화하는 더 쉬운 방법이 있어야합니다. – hangar18

1

저장소 패턴이 너무 강력한 이유와 그 이유를 놓치고 있다고 생각합니다. 프레젠테이션 레이어에서 호출하는 것이 이상하게 보일 수 있지만 다른 데이터 소스를 사용해야하는 페이지를 상상해보십시오. orderBL orderBL = new OrderBL(new OracleRepository());

+0

예 패턴 사용법에 약간 혼란 스럽습니다. 그러나 제 요점은 UI가 내 데이터 레이어를 호출하는 것을 원하지 않는다는 것입니다. 내 비즈니스 계층을 살펴보고 싶습니다. – hangar18

1

또 다른 대체 방법은 저장소 참조를 전달하지 않는 것입니다.

BL은 필요할 때 DL을 인스턴스화 할 수 있습니다. 데이터에서 여러 작업을 수행해야하는 교차 메서드 호출이있는 경우에는 Facade 레이어를 사용하여 비즈니스 개체 위에 놓습니다. 어쨌든 프리젠 테이션 계층의 데이터 계층 저장소에 대한 직접적인 참조가 필요하지 않습니다. 기분이 나아진다면 모델 클래스 (예 : Order)를 별도의 "모델"프로젝트로 끌어 내십시오.