2010-12-09 3 views
2

지금까지 내 질문에 대한 답을 찾을 수 없었으므로 첫 번째 질문을 몇 번해야합니다. 여기에 간다.비즈니스 계층의 데이터 액세스 계층에서 결과 필터링

필자는 다양한 데이터 저장 요소와 상호 작용하는 데이터 액세스 계층을 가지며 쿼리 할 때 POCO 또는 POCO 컬렉션을 반환합니다.

필자는이 계층 위에 비즈니스 계층이 있으며 데이터 액세스 계층에서 반환 된 개체에 비즈니스 규칙을 구현할 책임이 있습니다.

예를 들어, 나는 Dog of SQL Table을 가지고 있는데, 나의 데이터 액세스 레이어는 그 Dog의 목록을 Dog 객체의 컬렉션으로 반환 할 수 있습니다. 그런 다음 비즈니스 계층은 특정 연령 이하의 개를 필터링하거나 비즈니스 규칙에 따라 발생해야하는 필터링이나 변형을 수행합니다.

내 질문은 여기 있습니다. 관련 레코드를 기반으로 개체 필터링을 처리하는 가장 좋은 방법은 무엇입니까? 내가 고양이를 가진 모든 사람들을 원한다고 가정 해 봅시다. 현재 데이터 액세스 레이어는 모든 고양이와 모든 사람들을 반환 할 수 있지만 나를 위해 필터링을 수행하지는 않습니다.

내가 다른 데이터 액세스 방법을 통해 필터링을 구현할 수 있습니다 (즉, DAO.GetCatPeople())하지만 난 둘 다에서 모든 반환 할 수

처리하기 위해 관련 속성이나 관계의 다수가있는 경우이 복잡 얻을 수 SQL Server를 완벽하게 활용하지 못하는 추가 작업이 많은 비즈니스 계층에서 자신을 모두 일치시켜야합니다.

데이터 필터링 인터페이스를 작성할 수 있으며 데이터 액세스 레이어가 변경되면이 레이어도 변경되어야합니다.

내가 누릴 수있는 몇 가지 알려진 모범 사례가 있습니까?

답변

2

내가 취하는 견해는 왜 데이터에 액세스 할 수 있는지에 대한 두 가지 이유가 있다는 것입니다. 데이터 중심 및 유스 케이스 중심입니다.

  • 데이터 중심은 CRUD와 다른 일반적인/명백한 요소인데 아무런 생각이 없습니다.
  • "사용 사례"중심은 인터페이스를 정의하고 특정 용도로 POCO를 일치시키는 곳입니다. [여기에 공통된 용어가 없지만 사용 사례 중심적 의미]

두 유형 모두 유효하다고 생각합니다. 유스 케이스 중심의 경우 비즈니스 중심의 유스 케이스에 의해 대부분 주도 될 것이지만, 기술적으로 더욱 강력해질 수있는 경우를 볼 수 있습니다. 비즈니스 규칙을 위반하지 않는 한 괜찮 았을 것입니다. 또는 도메인 모델을 왜곡 할 수 있습니다.

고양이와 개는 서로에 대해 알고 있어야합니까? 동일한 도메인 모델 내에 존재하고 해당 모델 내에서 관계를 설정 한 경우 - 물론 그렇습니다. GetCatPeople()과 같은 쿼리를 작성할 수 있어야합니다.

복잡성을 관리하는 한 GetCatPeople()이 아니라 애트리뷰트를 매개 변수로 사용하는 좀 더 일반적인 방법 인 GetPeopleByAnimal(animal)을 사용할 수 있습니다.

관련 문제