我在SO、书籍和文章上读了很多关于DTO的内容,但我不确定自己是否理解正确。
我们在项目中使用DTO,使它们几乎成为领域对象的属性。因此,我们需要有一个复杂的DTO结构。其中一些类相互扩展,组合,聚合等。
更普遍的问题是:
从另一个DTO继承DTO或在另一个DTO中引用DTO是否正确?
我在SO、书籍和文章上读了很多关于DTO的内容,但我不确定自己是否理解正确。
我们在项目中使用DTO,使它们几乎成为领域对象的属性。因此,我们需要有一个复杂的DTO结构。其中一些类相互扩展,组合,聚合等。
更普遍的问题是:
从另一个DTO继承DTO或在另一个DTO中引用DTO是否正确?
从另一个DTO继承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只是一些简单的对象,也就是说它们没有行为(除了获取/设置自己的数据)。从架构的角度来看,DTO遵循与标准类/对象相同的规则,因此如果可能的话,您应该遵循相同的原则。
DTO是用于层间通信的。
我更喜欢简单的DTO,因为它们主要用于告诉持久层(通常是数据访问对象)要存储什么。如果是这种情况,不要选择复杂的DTO。
如果DTO很复杂(即一个DTO具有另一个DTO作为属性),则DAO存储数据所需的复杂性更大。这与DAO成为脱离存储技术的方式的目标相冲突。
因此,如果DTO需要引用另一个DTO,只需将字符串ID用作属性,并为每个DTO保留一个简单的DAO。处理互连DTO的逻辑应该放在使用DAO的服务应用程序或业务对象中。这样,您可以增加代码的重用性。