2012-03-21 1 views
0

내 엔티티 동작에 문제가있는 경우 문제가 발생하여 비틀 거린 것처럼 보입니다.DDD : MailService.SendNotificationToUser() 또는 User.Notify()?

누군가가 자신의 기사에 댓글을 달았을 때 사용자가 알림을받는 시스템이 있습니다. 지금은 이메일을 통해 전달됩니다.

DDD 방식을 구현하는 방법에 어려움을 겪고 있습니다.

옵션 1

사용자 개체는 통지 방법이 있습니다 User.Notify()를 방법은 이메일을 통해 전자 메일 알림을 보내 클래스에 내장 된 C# .NET을 사용

도메인에서이 문제가 발생하는 것은 기술적 인 문제이며 향후 사용자에게 알림이 변경 될 수 있다는 것입니다. 이것이 인프라에 속한다고 생각하지만, 사용자가 어떻게 행동을 취할 수 있습니까?

는 옵션 2

나는 서비스 생성 : NotificationService.Notify (사용자) 서비스는 프로가 있다는 것입니다 전자 메일을

을 보내 클래스에 내장 된 C# .NET을 사용하여 서비스는 애플리케이션 서비스가 될 수 있으며, 애플리케이션 서비스가 인프라를 사용하고 System.Net.Mail 및 리포지토리 같은 것을 호출 할 수 있다는 것을 알고 있습니다.

어떻게 구현하나요?

답변

3

이 작업은 User 엔터티의 자연스러운 부분으로 보이지 않습니다. 이 작업은 무 상태입니다. 따라서 통지는 서비스의 책임입니다.

비즈니스 로직이 아니기 때문에 도메인 서비스가 아닙니다. 알림 서비스는 도메인 (사용자)의 인프라 구현을 추상화합니다. 알림은 전자 메일, MSMQ 또는 데이터베이스에 메시지를 넣을 수 있습니다. 도메인 모델에는 영향을 미치지 않습니다. 따라서 인프라에 확실히 적용됩니다.

그래서 옵션 2를 선택합니다. 인프라 서비스.

추신 : 자세한 설명 이름을 고려하십시오. NotifyCommentAdded

+0

통찰력에 감사드립니다. 나는 국가를 고려하지 않았고, 이것은 정말로 나를 위해 일을 정리했다. – cfs

+0

하나의 질문이지만 누가이 서비스를 사용할 것입니다. MVC를 사용하여 "덧글 추가"를 처리하는 컨트롤러 작업이 있습니다. DB를 업데이트 한 다음 거기에 알림을 보내야합니까? 아니면 주석을 추가 한 Application Service를 호출하고 인프라 서비스 NotifyCommentAdded를 호출해야합니다. 따라서 iI가 UI 플랫폼을 변경한다면 사용자가 언제 통지를 받는지 아닌지에 대해 신경 쓰지 말고 응용 프로그램 서비스를 호출해야합니다. – cfs

+1

알림은 작업을 추가하는 주석의 일부이므로 응용 프로그램 서비스는이 호출에 좋은 장소라고 생각합니다. 네, 맞습니다. 논리 프리젠 테이션을 독립적으로 만듭니다. –