2011-08-12 2 views
2

현재 내 웹 사이트에는 사양 패턴이 포함 된 리포지토리 패턴이 있습니다. 나는 코드, 예를 단 몇 줄의 내 .aspx 페이지 내에서 데이터를 얻을 수 있습니다Entity Framework - 비즈니스 계층의 필요성에 대한 의견

private IRepository repository; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     repository = new GenericRepository(); 

     Specification<Book> specification = new Specification<Book>(b => b.Year == 1988); 
     lvBooks.DataSource = repository.GetAll<Book>(specification); 
     lvBooks.DataBind(); 
    } 

지금, 나는 내 웹 사이트에 당신의 대답은 '예 경우 비즈니스 계층이 필요합니까되어 내 질문에, 왜? 사양 패턴으로 인해 페이지와 저장소 사이에있는 비즈니스 계층이 필요하지 않은 것처럼 보입니다.

의견을 보내 주셔서 감사합니다.

답변

3

대답은이 응용 프로그램의 크기에 따라 크게 달라질 수 있습니다 , 그리고 그것이 얼마나 많이 바뀔지를 보여줍니다.

모든 레이어의 유일한 요점은 기능을 분리하는 것입니다. 작은 애플리케이션에서는 UI 코드 전체에 뿌려진 저장소에 대한 호출을 기꺼이 할 수 있습니다.

하지만 저장소를 구성하는 방식을 변경하면 어떻게 될까요? 모든 참조를 찾아 변경해야합니다.

그러나 상위 수준의 메소드를 UI에 표시하는 비즈니스 계층에 모든 저장소 액세스 코드를 작성한 경우이 시점에서 수행해야 할 작업이 훨씬 적습니다.

특정 보안 고려 사항이있을 수 있습니다. 예를 들어 UI에 저장소에 대한 액세스 권한이없는 경우 모든 보안 검사를 비즈니스 계층의 공개 API에 집중할 수 있습니다. 저장소가 어디서나 액세스 할 수있는 200 페이지의 웹 응용 프로그램이 있다면 물론 안전 할 수 있습니다. 그러나 어떻게 확신 할 수 있습니까?

단위 테스트가 있습니다. 기본적으로 올바른 방법은 없습니다. 그러나 앱이 작 으면 괜찮습니다 ... 앱이 크면 일부에서는이 디자인을 후회할 것입니다. 포인트.

+0

결국 큰 사이트가 될 것이므로 BLL을 만드라고해야합니까? 이 사양 저장소를 사용하여 비즈니스 계층을 어떻게 보이게해야합니까? (제 저장소는 30 개가 넘는 테이블을 가지고 있으므로 모든 개체에 대한 비즈니스 객체를 작성해야합니까?) – Julian

+0

매우 어려운 질문입니다! UI를 잊어서 시작하고 저장소가 존재합니다. 해당 도메인에 자연스럽게 들어 맞는 API가 있습니다. 리포지토리가 잘 설계된 경우이 API를 쉽게 지원할 수 있어야합니다. 그렇지 않으면 저장소를 변경하고 싶지 않은 경우이 API를 사용하도록 UI를 작성하십시오.이 시점에서 특정 UI 요구 사항을 지원하기 위해 API에 몇 가지 추가 메소드를 추가해야 할 수도 있지만, 가능하다면이 주제에 대해 수많은 책이 쓰여졌습니다 ... 6 줄에서 할 수있는 최선의 방법입니다. –

+0

하하, 고마워. 비록 제네릭 BLL이 특정 엔터티를위한 메서드를 가질 수 없기 때문에 제네릭 리포지토리에 BLL을 빌드하는 작업을한다면이 작업을 할 수있는 방법이 많이 생겼다 고 생각할 것입니다.) – Julian

1

코드에서 비즈니스 계층이 필요하지 않은 것으로 보입니다. 그것은 단순한 스펙을 사용하거나 데이터 삽입을 사용하여 데이터를 가져 오는 것 같습니다. 예 : 개체를 삭제하면 개체를 삭제하기 전에 특정 조건을 확인해야합니다.

+0

답장을 보내 주셔서 감사합니다. 실제로 개체를 삭제할지 여부에 대한 실제 규칙이 없습니다. 하지만 저장소와 직접 대화하면 보안 문제가 있습니까? – Julian

+0

나는 "보안 문제"가 있다고 생각하지 않고, 사이에 추가 레이어의 오버 헤드없이 코드를 간단하게 만든다. – Ankur

+0

논리적으로 보인다. 논평의 여지가있다. 앵커에 대한 감사의 말, 나는 좀 더 많은 의견을 기다리고 싶다. 나는 아직 그 대답을 받아들이지 않을 것이다. 감사! – Julian

관련 문제