我一直在尝试构建一个基于DDD的应用程序,但是我有一些问题。
我有一些层: - 表现层 - MVC - 应用层 - 领域层 ...
首先,我想知道是否可以在应用层中执行以下操作(获取家庭信息 > 获取默认消息信息 > 发送电子邮件 > 更新数据库):
public ApproveFamilyOutput ApproveFamily(ApproveFamilyInput input)
{
Family family = _familyRepository.GetFamily(input.Username);
family.Approve();
DefaultMessage defaultMessage = _defaultMessageRepository.GetDefaultMessage(MessageTypes.FamilyApproved);
_email.Send(family.GetEmail(), defaultMessage.Subject, defaultMessage.Message);
_familyRepository.Update(family);
bool isSaved = _familyRepository.Save();
return new ApproveFamilyOutput()
{
Errors = Helper.GetErrorIfNotSaved(isSaved)
};
}
我想确认一下,是应用层负责这项工作吗?
第二个问题是:根据用户的权限,我需要向表示层发送一些数据。这些权限在数据库中定义。例如: - 对象“Family”具有姓名、姓氏、电话号码和电子邮件属性,用户可以显示/隐藏其中的每个值。 我该如何处理这个问题?
我能否在应用层中做类似以下的事情:
public GetFamilyOutput GetFamily(GetFamilyInput input)
{
Family family = _familyRepository.GetFamily(input.Username);
FamilyConfiguration familyConfiguration = _familyConfigurationRepository.GetConfigurations(family.Id);
//ProcessConfiguration will set to null the properties that I cannot show
family.ProcessConfiguration(familyConfiguration);
return new GetFamilyOutput
{
//Map Family Object to the GetFamilyOutput
};
}
注意:家庭、DefaultMessage和FamilyConfiguration是在域层内创建的领域对象。
你有什么看法?
谢谢 :)
编辑: 注意:我喜欢下面所有的答案,并且我使用了所有答案中的一些内容 :) (我无法将所有答案标记为可接受)