저는 Evans, Nilsson 및 McCarthy를 읽었으며 도메인 중심 디자인의 개념과 추론을 이해합니다. 그러나이 모든 것을 실제 응용 프로그램에 넣기 란 어렵습니다. 완전한 예가 부족하여 내 머리가 긁히게되었습니다. 나는 많은 프레임 워크와 간단한 예제를 발견했으나 DDD 다음에 실제 비즈니스 애플리케이션을 구축하는 방법을 실제로 보여주었습니다.점을 DDD로 연결
일반적인 주문 관리 시스템을 예로 들어 주문 취소의 경우를 생각해보십시오. 내 디자인에서는 CancelOrder 메서드를 사용하여 OrderCancellationService를 볼 수 있습니다.이 메서드는 매개 변수로 주문 번호와 이유를 허용합니다.
이- 현재 사용자가 주문
- OrderRepository
- 있는지 확인에서 지정된 순서 번호와 주문 엔티티를 검색을 취소하는 데 필요한 권한이 있는지 확인합니다 : 그것은 다음 '단계'를 수행 할 수있다 주문이 취소 될 수 있습니다 (서비스가 규칙을 평가할 수있는 주문 상태를 문의하거나 주문에 규칙을 캡슐화하는 CanCancel 속성이 있어야합니까?)
- Order.Cancel을 호출하여 Order 엔터티의 상태를 업데이트합니다 (이유)
- 업데이트 유지 데이터 저장소
- 연락 이미
- 조작에 대한 감사 항목을 추가 처리 된 모든 신용 카드로 지불을 되 돌리는 CreditCardService에 D 주문은 물론
,이 모든 거래에서 발생한다 독립적으로 발생할 수있는 조작이 있어서는 안됩니다. 주문을 취소하고 취소 할 수 없으며이 단계를 수행하지 않으면 신용 카드 거래를 되돌려 야합니다. 이것은 imo가 더 나은 캡슐화를 제안하지만 내 도메인 객체 (Order)의 CreditCardService에 의존하지 않으므로 도메인 서비스의 책임이라고 생각됩니다.
나는 어떻게 이것이 "조립"될 수 있는지/또는 있어야하는지 코드 예제를 보여줄 누군가를 찾고 있습니다. 코드 뒤의 생각 과정은 나 자신을 위해 모든 점들을 연결시키는 데 도움이 될 것입니다. 고마워!
서비스 내에서 '조회', 트랜잭션 관리 및 전화 변경이 필요하지 않은 이유는 무엇입니까? 매번 올바른 사용법을 보장하는 것 같습니다. – SonOfPirate
조회 - 아마도. 트랜잭션 관리는 도메인 서비스에 속하지 않으며 일반적으로 응용 프로그램 계층 (도메인 서비스 호출자)에서 구현됩니다. '변경을 지속하라는 호출'은 ORM이나 UnitOfWork에 의해 처리됩니다. 왜냐하면 우리가 기존의 객체를 변경하고 있기 때문에 NHibernate의 경우 명시적인 호출이 필요하지 않습니다. 아이디어는 도메인 코드를 가능한 한 영원 불가지론 자로 유지하는 것입니다. – Dmitry
그래요, 나는 OrderRepository와 UoW를 사용하여 가능한 한 영속성을 불가지론하는 것으로 도메인을 유지할 것이지만 Order 엔티티의 변경 사항을 유지하지 않고 응용 프로그램 코드가 취소 서비스를 호출하는 것을 막을 수는 없습니다. 불가지론 자이기 때문에 지금까지 우리가 NHibernate를 사용하지 않는다는 것이 중요하지 않았다고 생각했기 때문에 ORM을 기반으로하는 가정은 유효하지 않습니다. – SonOfPirate