我有一个 EmployeeDTO 代表数据库中的 Employee 记录。Employee 表与 Department 存在关系,与 Permission 存在一对多关系。

在我的实体中,它们表示为完全扩展的部门属性和完全扩展的权限对象列表。

问题是 DTO 是否应该具有 DepartmentId 的完全扩展的 DepartmentDTO 属性?DTO 是否应该具有 PermissionId 列表的完全扩展的 PermissionDTO 属性列表?

有帮助吗?

解决方案

就像设计中的所有内容一样,这取决于您的需求。

  • 如果您需要经常查看和 绑定到子属性,您想要 使它尽可能容易 开发人员使用您的DTO,您可以 想要明确的工厂方法 您完全扩展了子属性。
  • 如果您想简化代码,请不要 扩展外键属性并 只是让开发人员生孩子 他们想要的物体/收藏品 根据需要。

    您可能会遇到递归问题;您是否还要扩展Department对象的所有外键属性?如果在Department的子类中引用另一个EmployeeDTO,该怎么办?

    Microsoft的Entity Framework以及其他流行的业务对象框架通过延迟加载来处理此概念-仅在代码要求的情况下,才获取完整的扩展子属性。这可能是最灵活的解决方案,但是开销/滞后时间很小,因为无法在与父对象相同的数据库调用中获取子属性。当然,这些并不是纯粹的DTO。

其他提示

是和否。这取决于调用以及您是否在每次调用中都需要所有额外属性。它还可能取决于您使用的 ORM 技术,该技术可以实现延迟加载并可以影响您的决定(如果您传递直接实体对象,尽管它是 不建议).

创建一个包含所有必要属性的案例 DTO 和一个或多个公开更多功能并用于其他方法的 DTO 对象是很常见的。例如,我有一个 BasicUser 类只包含 UserNameDisplayName 我有 User 其中包含更多包括 Permissions继承 来自“BasicUser.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top