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