设计包含对象列表的 DTO

Designing DTOs that contain lists of objects

假设我有以下领域模型:

Project                Task
    - Id                   - Id
    - Name                 - Name
    - List<Task>           - Project

一个项目有多个任务,一个任务有一个项目。

现在假设我要创建一个 TodoListDTO 数据传输对象。我最初的想法是这样做:

TodoListDTO
    - List<Project>

看似简单。然后我可以访问每个项目中的任务列表。然后我在几个地方读到 DTO 应该尽可能扁平。但是我如何在不使用复杂对象的情况下对其进行建模?

我可以有一个类似于 TodoListDTO 的 ProjectDTO:

ProjectDTO
    - ProjectId
    - Name
    - List<TaskId>
    - List<TaskName>

但是拥有单独的 TaskIds 和 TaskNames 列表似乎很不方便,而且我看不出这比在 ProjectDTO 上拥有一个列表 属性 有什么好处。

处理这个问题的好方法是什么?

您之前的 classes 非常简单并且是标准的实现方式。您将创建一个 Context class 来保留项目和任务列表。一共三个classes.

您可以做的另一件事是创建

的另一个域模型
ProjectTask
    - ProjectId
    - ProjectName
    - TaskId
    - TaskName

这可能有助于处理一对多关系(也允许多对多关系)并避免令人困惑的循环项目->任务->项目->任务结构。从这里您可以让您的 API 客户按 projectId 对所有 ProjectTasks 进行分组并以这种方式处理它。

话虽这么说,我认为你原来的方法很好,但这里有一个替代方法。