표시되는 문제는 도메인 기반 디자인에 의해 야기 된 것이 아니라 우려의 분리로 인한 것입니다. 도메인 기반 디자인은 단순히 데이터와 동작을 함께 배치하는 것이 아닙니다.
제가 권하는 첫 번째 것은 하루 정도 걸리고 Info-Q에서 무료로 다운로드 할 수있는 Domain Driven Design Quickly을 읽는 것입니다. 여기서는 엔티티, 값 객체, 서비스, 리포지토리 및 팩토리와 같은 여러 유형의 도메인 객체에 대한 개요를 제공합니다.
내가 권하고 싶은 두 번째 것은 Single Responsibility Principle에서 읽는 것입니다.
세 번째로 추천하는 것은 Test Driven Development에 자신을 담그는 것입니다. 테스트를 작성하여 처음부터 디자인을 배우는 것이 반드시 디자인을 훌륭하게 만들지는 못하지만 느슨하게 결합 된 디자인으로 안내하고 이전에 디자인 문제를 드러내는 경향이 있습니다.
예를 들어, WebsiteUser는 분명히 너무 많은 책임이 있습니다. 사실 사용자가 일반적으로 ISecurityPrincipal
으로 표시되기 때문에 WebsiteUser
이 필요하지 않을 수도 있습니다.
비즈니스 컨텍스트가 부족하여 디자인에 어떻게 접근해야하는지 정확하게 설명하는 것이 어렵지만, 먼저 시스템에있는 주요 명사를 나타내는 인덱스 카드를 만들어 두뇌 공격을하는 것이 좋습니다. (예 : 고객, 주문, 영수증, 제품 등). 후보 클래스 이름을 맨 위에 적고, 왼쪽에있는 클래스의 고유 한 책임은 무엇인지, 그리고 오른쪽에있는 클래스와 협력하십시오. 일부 동작이 객체에 속한 것처럼 느껴지지 않는 경우, 이는 아마도 좋은 서비스 후보 (즉, AuthenticationService) 일 것입니다.대학과 함께 테이블에 카드를 펼치고 토론하십시오. 이것이 실제로 브레인 스토밍 디자인 연습으로 의도 된 것이므로 너무 많이 사용하지 마십시오. 화이트 보드를 사용하는 것보다 때때로 작업을 수행하는 것이 약간 쉬울 수 있습니다.
장기적으로 보면 에릭 에반스가 책 Domain Driven Design을 실제로 받아야합니다. 그것은 큰 읽을 거리지만, 당신의 시간 가치가 있습니다. 언어 환경에 따라 Agile Software Development, Principles, Patterns, and Practices 또는 Agile Principles, Patterns, and Practices in C# 중 하나를 선택하는 것이 좋습니다.
이 의견을 보내 주셔서 감사합니다. Evans의 책을 읽었습니다. 문제는 하나의 엔티티에 많은 공동 작업자가있는 경우입니다. 예 : 웹 사이트 사용자 (또는 사용자)는 최신 주문, 첫 번째 주문, 장바구니, 암호 등을 가지고 있습니다.이 모든 것은 웹 사이트 사용자와 직접 관련이 있습니다. – Pablojim
인증, 보류 중 주문 상태 (쇼핑 카트) 및 주문 내역은 별개로 우려됩니다. 인증을 IAuthenticationService로 가져 와서 IOrderHistoryRepository (또는 IOrderHistoryService)를 만들어 주어진 사용자의 주문 내역을 검색하는 동작을 캡슐화하는 것이 좋습니다. –