문제

저장소가 있습니다 (CustomerRepository) 데이터 계층에서 데이터를 검색합니다. 대부분의 비즈니스 로직은 엔티티 클래스에 있습니다 (Customer) 리포지토리가 수락하거나 반환합니다.

그러나 모든 고객에게 적용되는 글로벌 엔티티 비즈니스 로직을 어디에 두십니까?

예를 들어, 모든 고객을 특정 사용자에게 반환하고 싶지 않을 수도 있습니다. 저장소에 그 논리를 넣고 싶지 않습니다.

도움이 되었습니까?

해결책

나는 Robert Munteanu에 동의합니다.

기본적으로 모델에 내재 된 비즈니스 로직을 중간 계층으로 롤업합니다. 중간 계층은 비즈니스 계층 / 비즈니스 객체 / 비즈니스 로직 계층 등이지만 서비스 계층이라고합니다. 웹 서비스 일 필요는 없으며 특정 응용 프로그램 영역의 기능을 집계한다는 점에서 서비스를 광범위하게 사용합니다.

기본적으로 리포지토리 참조가 포함 된 CustomersOrvice 클래스가 있습니다. 프레젠테이션 계층은 서비스 계층 클래스를 참조합니다.

.NET을 사용하는 이름에서 추측으로 만들 수있는 추가 차이가 있으며, 아마도 Nerddinner에 요약 된대로 리포지토리로 LINQ에서 SQL을 사용할 수 있습니다.

이 저장소는 일반적으로 서비스 계층에 iqueryable을 반환하여 서비스 계층 체인이 여러 쿼리를 하나로 묶어 다른 결과 세트를 빌드 할 수 있습니다. 그런 다음 서비스는 Tolist 또는 다른 유사한 방법을 사용하여 표현식을 평가하고 프레젠테이션 계층으로 반환합니다.

다른 팁

서비스 뒤에 싸십시오.

다른 저장소 (BusinessRulerePository)에 넣고 고객 편견을 사용하도록하십시오.

또는

비즈니스 로직이 결과를 제한하는 경우 사용자가 공장에서 외관 패턴을 사용하고 싶을 수 있습니다. 이 경우 CustomerRepository 및 LimitedCustomerRepository (CustomerRepository를 캡슐화 할 수 있음) 및 사용자에게 적절한 iCustomerRepository를 반환하는 CustomerRepositoryFactory를 처리하는 iCustomerRepository가 있습니다.

이러한 유형의 함수를 서비스 계층으로 분리하는 것이 길이라고 생각합니다.

나는 최근에 과거 데이터를 사용하여 많은 엔티티와 복잡한 예측을 할 수있는 시스템을 구축했습니다. 모든 데이터 액세스 비트를 각 엔티티의 저장소에 넣습니다. 복잡한 예측 논리는 서비스 계층에 보관하고 필요에 따라 저장소 객체를 전달했습니다.

추가 보너스는 단순히 웹 API 계층을 만들어 외부 시스템에 모든 예측 논리를 노출시키는 쉬운 방법이 있다는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top