我正在尝试在我当前的项目中应用 DDD 的原理。我将尝试用一个希望有意义的例子来问这个(冗长的)问题。
创建新成员时,我的表示层调用在应用层中定义的 MemberService.CreateMember(MemberDTO memberDTO)。
我的表示层有这样的东西:
MemberDTO member = new MemberDTO(); //Defined in Application Layer
member.Username = username;
member.Password = password;
//...etc
我的应用程序层在域层中调用以下工厂方法来创建成员:
public static Member MemberFactory.CreateMember(string memberDTO.Username, string memberDTO.Password...)
{
var member = new Member(); //Domain.Model.Member
member.Id = GenerateIdentity();
member.Username = memberDTO.Username;
//... etc
return member;
}
成员被传递回 MemberService(应用程序层),后者保存它(基础设施层中的存储库)并将其映射到 MemberDTO(使用 AutoMapper)并将其传递回表示层。
因此,我的表示层在 MemberDTO 中设置值,然后我的域层(通过工厂)获取单个参数并为成员设置值。如果没有工厂,它会很简单,但我在这里生成 Id。创建域服务而不是生成 Id 会不会是错误的?例如,将 MemberService.CreateMember(MemberDTO memberDTO) 方法从:
public MemberDTO CreateMember(MemberDTO memberDTO)
{
var member = MemberFactory.CreateMember(memberDTO.Username, memberDTO.Password);
//Domain.Model.Member
SaveMember(member);
//Pass DTO to presentation layer
return Mapper.Map<Member, MemberDTO>(member);
}
对此:
public MemberDTO CreateMember(MemberDTO memberDTO)
{
var member = new Member(); //Domain.Model.Member
Mapper.Map<MemberDTO, Member>(memberDTO);
//Add this method into a Domain Service to generate the ID and any other defaults
Domain.MemberService.Initialise(member);
SaveMember(member);
//Pass DTO to presentation layer
return Mapper.Map<Member, MemberDTO>(member);
}
很抱歉这个冗长的问题,即使答案可能是简单的是或否!