复杂的DTO结构

时间:2012-07-26 10:28:46

标签: .net design-patterns domain-driven-design data-transfer-objects

我在SO,书籍和文章中已经阅读了很多关于DTO的内容,但我不确定我是否做得对。

我们在项目中使用DTO,因此它们几乎只是Domain Objects的属性。因此,我们需要一个复杂的DTO结构。有些类相互扩展,组合,聚合等。

问题更为笼统。

从另一个dto继承dto或在另一个dto中引用dto是正确的吗?

2 个答案:

答案 0 :(得分:4)

  

从另一个继承DTO是否正确

如果他们有共同的属性,为什么不呢?

  

在DTO中引用另一个DTO

这绝对没有错,请考虑以下几点:

public class UserDto
{
    public string Id { get; set; }
    public string Username { get; set; }
    public string Email { get; set; }
    public AddressDto Address { get; set; }
}

public class AddressDto
{
    public string AddressLine1 { get; set; }
    public string AddressLine2 { get; set; }
    public string City { get; set; }
}

记住DTO只是 dumb 对象,即它们没有行为(除了获取/设置自己的数据)。从架构的角度来看,相同的规则适用于标准类/对象的DTO,因此没有理由不在可能的情况下遵循相同的原则。

答案 1 :(得分:0)

DTO用于层间通信。

我更喜欢简单的DTO,因为它们主要用于告诉持久层,一般来说数据访问对象,存储什么。如果是这种情况,请不要选择复杂的DTO。

如果DTO很复杂(即具有另一个DTO作为属性的DTO),则DAO存储数据所需的复杂性更高。这与DAO的目标冲突成为与存储技术脱钩的方式。

因此,如果DTO需要寻址另一个DTO,只需使用字符串ID作为属性,并为每个DTO保留一个简单的DAO。处理互连DTO的逻辑应该转到使用DAO的服务应用程序或业务对象。这样,您可以增加代码的重用。