2010-01-05 8 views
2

우리는 많은 것들과 함께 Active Directory에 대한 몇 가지 변경 (그룹에서 사용자 추가/제거, 사용자의 속성 값 변경 등)을 수행하는 응용 프로그램을 보유하고 있습니다.도메인 모델에 기술 관련 정보를 배치 할 위치는 어디입니까?

우리는 이제 "스파게티 코드"에서 더 계층화 된 솔루션으로 재 설계하는 중입니다. Active Directory 관리 기능은 도메인 계층에서 어느 정도 추상화하려는 것이지만 동시에 대부분의 기능은 매우 기술 의존적입니다.

우리는 DB 액세스와 함께 데이터 액세스 계층에 모든 Active Directory 액세스 코드를 배치해야합니까? 아니면 함수의 활성 디렉토리 라이브러리를 만들고 도메인 모델에서이 라이브러리를 직접 호출 할 수 있습니까? 그게 도메인 객체를 지속적으로 인식하게 만드는 것은 아마도 나쁜 생각일까요?

대신 서비스 레이어에서 모든 Active Directory 액세스가 대신 수행되어야하며 도메인 계층을 포함하지 않아야합니까?

답변

2

도메인 모델은 기술에 관계없이이어야합니다. 따라서 AD 코드를 도메인 모델에 넣지 마십시오.

본질적으로 AD 코드는 데이터 액세스의 또 다른 형태이므로 데이터 액세스 레이어 (DAL)에 속한다고 말할 수 있습니다. 그러나 데이터베이스 모듈과 함게 속하지 않으므로 Single Responsibility Principle (SRP - 모듈과 개별 유형에 적용됨)을 위반하게됩니다.

데이터베이스 액세스와 함께 번들로 묶는 대신 자체 라이브러리에 구현하십시오. 개념적으로는 같은 레이어에 속하지만 다른 작업을 수행하므로 동일한 레이어에 두 개의 라이브러리가 있습니다. 그게 절대적으로 좋습니다 - 당신은 필요한만큼 각 계층에 많은 라이브러리를 가질 수 있습니다.

도메인 모델에서 AD 액세스 (및 DB 액세스)를 추상화로 처리합니다. 요약 리포지토리이 기본 접근 방식입니다. AD 라이브러리에는 AD 저장소의 구현이 포함될 것이며 DB 라이브러리에는 DB 저장소의 구현이 포함됩니다.

이것은 Domain-Driven Design반부패 레이어의 개념에 잘 맞습니다.

종속성 주입 (DI)을 사용하여 콘크리트 리포지토리를 도메인 모델에 연결할 수 있습니다.

+0

그건 의미가있다. 그래서 내 도메인 계층에 사용자, 그룹 등을위한 도메인 객체가 있어야한다는 것을 의미하고 가상 프록시 패턴과 같은 것을 활용하여 도메인 객체에 기술 특정 관심사를 추가합니다 (예 : 그룹 추가/제거). – Per

+0

컨텍스트에서 의미가있는 경우 사용자 및 그룹을 도메인 모델에 추가하십시오 (아마도 그렇게 할 것입니다). 모든 도메인 객체는 POCO이어야하므로 가상 프록시는 필요 없습니다. 리포지토리는 기본 저장소에서 Domain 개체를 검색하거나 수정할 수있는 메서드를 간단히 표시합니다. –

+0

도메인 객체가 리포지토리를 인식해야한다는 의미입니까? 여기에 내 머리를 굴곡시키고 있지만 도메인 모델을 올바르게 구현하는 방법을 명확하게 볼 수는 없습니다 ...;).도메인 모델을 구현하는 방법에 대한 많은 의견이있는 것으로 보입니다 (아니면 그냥 잘못 해석 한 것입니다). 누군가가 내 손을 잡고 디자인 할 수 있기를 바랍니다.) – Per

0

기술 특정 사항은 구현 세부 사항이라고 생각합니다. 도메인 모델에 넣으면 안됩니다.

+0

대신 서비스 레이어에 배치해야한다는 의미입니까? 아니면 어디에 배치해야한다고 제안합니까? 나는 도메인 모델에 익숙하지 않다. (주제에 관한 많은 기사와 책을 읽었지 만 여전히 아직 편안하지는 않다.) – Per

관련 문제