我正在设计一个需要尽可能灵活的新的大型应用程序。
我选择主要使用 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 中的某些内容?
谢谢,帕维尔。