我有一个EmployeeDTO,它在数据库中表示一个Employee记录。 Employee表与Department有关系,与Permission有1对多的关系。
在我的实体中,这些表示为完全展开的Department属性和完全展开的权限对象List。
问题是DTO是否应该完全扩展DepartmentId的DepartmentDTO属性? DTO是否应该具有PermissionId列表的完全展开的PermissionDTO属性列表?
答案 0 :(得分:3)
就像设计中的一切一样,这取决于您的需求。
你可能会在递归中遇到问题;你是否也扩展了Department对象的所有外键属性?如果在Department的子类中有另一个EmployeeDTO的引用怎么办?
Microsoft的Entity Framework以及其他流行的业务对象框架通过延迟加载来处理这个概念 - 只有在代码调用时才获取完整的扩展子属性。这可能是最灵活的解决方案,但由于无法在与父对象相同的数据库调用中获取子属性,因此具有一点开销/滞后。这些当然不是纯粹的DTO。
答案 1 :(得分:2)
是和否。这取决于电话,如果您在每次通话中都需要所有额外的属性。它还可能取决于您使用的ORM技术,它可以实现延迟加载并可能影响您的决策(如果您传递直接实体对象,但不推荐)。
通常创建一个包含所有必需属性的案例DTO和一个或多个DTO对象,这些对象公开更多功能并将其用于其他方法。例如,我有一个BasicUser
类,其中只包含UserName
和DisplayName
,而我User
包含更多内容,包括Permissions
和继承来自`BasicUser。