사용자가 이벤트 페이지에 전자 메일 주소를 입력 할 때 이벤트 미리 알림을 추가해야한다는 요구 사항이 있습니다. 이벤트가 다른 도메인 객체입니다. 우리의 초기 생각은 고객의 도메인 객체와 관련 CustomerService를을 만드는 것이었다 :유닛 테스팅 도메인 객체
public class CustomerService {
public void AddEventReminder(string emailAddress, int eventId) {
var customer = new Customer(emailAddress);
customer.AddEmailReminder(eventId);
}
}
어떻게 우리가 AddEmailReminder 방법은 실제로 새로운 고객에 호출되었음을 단위 테스트에서 확인할 수 있습니까?
내 생각 :
- 사용 고객을 만드는 공장. 왜냐하면 나는 당신이 단지 객체 생성에 약간의 복잡성이있는 공장을 사용하기로되어 있다고 생각했기 때문에 냄새가 난다.
- 잘못된 코드입니다. 아마 이것을 할 수있는 더 좋은 방법이 있을까요?
- Moq magic.
별도의 메모 (관련이있을 수 있음)에서 어떻게 집계 루트를 결정합니까? 우리는 고객이 임의로 결정했으나 똑같이 이벤트 일 수 있습니다. 나는 골재 뿌리에 대한 기사를 읽고 이해했으나이 시나리오에서는 명확하지 않다.
이 도메인 서비스 방법의 요점은 전자 메일 주소와 이벤트 ID가있는 dto를받은 응용 프로그램 서비스에서 직접 호출된다는 것입니다. 나는 도메인 객체가 완전한 객체만을 다루어야한다고 생각 했으므로 도메인 서비스는 이것을 처리해야한다. 도메인 객체가 모든 논리에 관한 것처럼 다른 방법으로 생각할 수 있다면, 빈약하다는 것이 왜 도메인 서비스로 진행해서는 안된다는 의미인지 나는 알지 못합니다. 다시 합계 루트, 그들은 모두 집계 뿌리에 동의, 내가 묻고 있던 질문은 집계 루트가 협회에 대한 책임은 무엇입니까? – JontyMC
... 재미있는 대답. 서명을 변경하려면 Customer aggregate root를 작성하는 코드는 무엇입니까? 아마도 이것은 더 적절한 질문입니다. – JontyMC
서비스가 응용 프로그램 계층에서 매핑되는 것으로 의심됩니다. 그러나이 경우 도메인 서비스는 아니며 응용 프로그램 계층 서비스이며 해당 계층에 속합니다. 이 경우 전자 메일 주소를 기반으로 기존 고객을 조회 할 수있는 추상 팩토리 (아마도 CustomerRepository)가 필요하다고 생각합니다. –