2011-01-26 4 views
2

프리젠 테이션에 사용해야하는 절차를 서비스 클래스로 옮겨야한다는 DDD 책 (Eric Evans)을 읽었습니다. 예를 들어 BankAccountManagementService에는 ChangeBankAccount, GetByAccountId ... 메소드가 있습니다.도메인 객체 캡슐화 : 정적 메소드와 서비스 클래스

그러나 다른 비즈니스 개체에서 할당 할 수 없도록 일부 속성의 setter를 캡슐화해야합니다. C#에는 친숙한 클래스가 없으므로 서비스의 경우이 유형의 캡슐화를 사용할 수 없습니다. 그러나 BankAccount 비즈니스 객체의 정적 메소드를 사용하여이를 수행 할 수 있습니다.

(1) 위에서 언급 한 이유로 서비스를 사용하는 경우 어떻게이 제한 사항을 해결합니까?

편집 : 추가 질문

(2)는 정적 메서드 대신 서비스를 사용하는 것이 나쁜 이유는 무엇입니까? 난 그들을 별도의 부분 클래스 파일에 배치하여 proc 코드와 엔터티 코드를 섞지 않아도된다. 사전에

감사합니다 :)

답변

6

도메인 개체의 속성은 (불변) 설정되어서는 안 경우, 그 개인 (또는 보호)합니다.

도메인 개체의 개인 속성을 변경하는 서비스 메서드는 필요한 유효성 검사 및 사용 권한 검사를 수행하고 변경하려는 속성이있는 해당 생성자 중 하나 (해당 ID 포함)를 통해 새 개체를 만들고 그 객체를 저장하십시오.

또 다른 옵션은 새 값과 특정 종류의 사용 권한 개체를 사용하는 도메인 개체에 set 메서드를 넣거나 해당 메서드가 특정 권한을 요구하도록 특성을 지정하는 것입니다. 그렇게하면 집합이 호출되는 위치를 제한 할 수 있습니다.

편집 : 고정적으로 만드는 것은 아키텍처 블랙홀입니다 : 어떤 식 으로든 상속을 받거나 변경할 수 없습니다. 의존성 주입을 사용할 수 없게 만듭니다. 버전 관리가 어렵습니다. 일단 정적으로 만들고 사용하면 그 결정을 취소하기가 어렵습니다. 또한 정적 메서드는 인스턴스 데이터를 사용할 수 없지만 나중에 필요할 수 있습니다.

메서드가 인스턴스 메서드 인 경우 다형성 및 제네릭을 사용하여 일반 ServiceBase 클래스를 만들고 여기에 일반적으로 사용되는 메서드를 넣을 수 있습니다.

+0

답변 주셔서 감사합니다. 그러나 서비스 대신 정적 메서드를 사용하지 않는 이유는 무엇입니까? – Danil

+0

정답을 반영하기 위해 수정 된 답변 – TimC

+2

@Danil : 주어진 예는 이것입니다. BankService 클래스가 있다고 가정 해보십시오. 은행 계좌를 조작하는 데 필요한 모든 방법이 있습니다. 한 국가에 따라 다른 방법이 필요한 경우 어떻게됩니까? 메소드 이름은 같을 수 있지만 프로세스 이름은 약간 다를 수 있습니다. 이것은 서로 다른 인스턴스를 가지고 있다는 아이디어가 자신을 정당화하는 곳입니다. 두 개 이상의 인스턴스가 있으면 같은 자리 표시 자 (일반적으로 인터페이스)를 유지하면서 서비스를 서로 바꿀 수 있습니다. 정적으로 만 수행하는 것은 비실용적입니다. 실제로 정적 메서드는 유틸리티 클래스로 제한되어야합니다. –

관련 문제