设计包含对象列表的DTO

时间:2016-08-26 22:25:11

标签: c# .net entity-framework data-transfer-objects

假设我有以下域模型:

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

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

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

TodoListDTO
    - List<Project>

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

我可以使用类似于:

的ProjectDTO代替TodoListDTO
ProjectDTO
    - ProjectId
    - Name
    - List<TaskId>
    - List<TaskName>

但是拥有单独的TaskIds和TaskNames列表似乎不方便,而且我不知道如何在ProjectDTO上拥有List属性。

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

2 个答案:

答案 0 :(得分:4)

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

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

这可以帮助实现一对多的关系(也允许多对多),并且可以帮助解决令人困惑的项目 - &gt;任务 - &gt;项目 - &gt;任务结构。从这里,你可以让你的API客户端组通过projectId获得所有ProjectTasks并以这种方式处理它。

话虽如此,我认为你原来的方式很好,但这里有另一种选择。

答案 1 :(得分:1)

您以前的课程很简单,也是标准的做法。您将创建一个Context类,该类将保留Projects和Tasks列表。共有三个班级。