【发布时间】:2012-12-20 10:54:55
【问题描述】:
我正在设计一个新的大型应用程序,它需要尽可能灵活。
我选择主要使用 DDD 进行设计..
我的问题是关于将 DTO 对象转移回我的服务层中的 DO 对象。
即: 这是我映射到数据库的域对象(使用 ORM)
public class Cat
{
int ID {get; set;}
string Name {get; set;}
string BloodType {get; set;}
string Color {get; set;}
void Run(){...}
void Purr() {...}
}
只有服务器操作需要方法和一些属性。
这就是我为这种猫类型设计另一个数据传输对象的原因:
public class CatDTO
{
int ID {get; set;}
string Name {get; set;}
}
在中间,我将设置一个对象映射器来将我的 DO 转换为 DTO(反之亦然)。
当客户想要更新猫的名字时,他会调用这样的服务
public void UpdateCat(CatDTO cat)
{
// What will happen here?
Cat serverCat = Mapper.GetCat(CatDTO);
CatDao.SaveOrUpdate(serverCat);
}
当映射器将 DTO 对象转换回 DO 时,它必须访问 DB 以填充 Cat 对象的缺失属性(血型等)
不得不说这个动作是荒谬的,但是如果不填充空属性,服务器端的其余部分就无法使用 Cat 对象,因为它依赖于那些缺失的属性(即使我只是尝试更新数据库中的数据,我的 ORM 也会更新血型字段为空字符串!)
我搜索了这个问题,但在网上找不到任何解释(或者至少有人像我一样被这个问题困扰)
我是不是设计错了?也许我错过了我的 DDD 中的某些内容?
谢谢,帕维尔。
【问题讨论】:
标签: domain-driven-design dto service-layer