【发布时间】:2018-04-16 16:42:47
【问题描述】:
我正在使用的域是会员系统。我有一个域概念,叫做 Enrollment Invitation Period,在此期间用户可以邀请其他人注册成为会员。注册邀请期可以打开/关闭并保留邀请。邀请是姓名和电子邮件地址。
我有一个要求:当注册邀请期开放时,它应该联系任何未联系的邀请。在我看来,这是 Enrollment Invitation Period 班级应该负责的事情。它可以访问满足此业务需求所需的所有信息。
接下来,我有一个电子邮件服务。它负责获取模板、构建和发送电子邮件。它是基础设施。
所以我的问题。 Enrollment Invitation Period 域对象应如何与电子邮件服务交互。
A) 将服务(通过抽象)注入到联系功能中?这是否将域与基础架构紧密联系在一起?
var period = repo.Get(id);
period.ContactInvitations(emailService);
B) 编写一个域服务来查询邀请期间的信息?
(In Service)
var period = repo.Get(id);
if (period.IsOpen)
{
var unconcacted = period.GetUncontactedInvitations();
foreach(var i in uncontacted)
{
var email = BuildEmailFromInvitaion(i);
emailService.Send(email);
}
}
从我的直觉来看,A 似乎更好。 B 似乎没有反映“邀请期间联系受邀者”的语言。
【问题讨论】: