【发布时间】:2016-09-21 14:52:15
【问题描述】:
我正在尝试将通用语言应用于我的域对象。
我想将来自客户端的Data Transfer Object 转换为域对象。 Aggregate's Constructor 只接受必填字段,其余参数应使用aggregate's API 传递,即使在创建Aggregate 时(比如CreateAggregate command)。
但是DTO 到Aggregate 的映射代码变得有点乱:
if(DTO.RegistrantType == 0){
registrantType = RegistrantType.Person()
}
elseif(DTO.RegistrantType == 1){
registrantType = RegistrantType.Company()
}
//.....
//.....
var aggregate = new Aggregate(
title,
weight,
registrantType,
route,
callNumber,
)
//look at this one:
if(DTO.connectionType == 0){
aggregate.Route(ConnectionType.InCity(cityId))
}
elseif(DTO.connectionType == 1){
aggregate.Route(ConnectionType.Intercity(DTO.originCityId,DTO.DestinationCityId)
}
//..........
//..........
我应该提到的一点是,这个问题似乎不是特定领域的问题。
如何在不让domain internals leakage 的情况下减少这些 If-Else 语句,并确保 聚合(不是映射工具) 不接受可能使其业务规则无效的值,并应用了无处不在的语言?
请不要告诉我我可以使用AoutoMapper 来解决问题。请仔细阅读最后一部分。'
谢谢。
【问题讨论】: