我在SO,书籍和文章中已经阅读了很多关于DTO的内容,但我不确定我是否做得对。
我们在项目中使用DTO,因此它们几乎只是Domain Objects的属性。因此,我们需要一个复杂的DTO结构。有些类相互扩展,组合,聚合等。
问题更为笼统。
从另一个dto继承dto或在另一个dto中引用dto是正确的吗?
答案 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的服务应用程序或业务对象。这样,您可以增加代码的重用。