【发布时间】:2016-08-26 22:25:11
【问题描述】:
假设我有以下领域模型:
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 上拥有一个 List 属性更好。
有什么好的方法来处理这个问题?
【问题讨论】:
-
尽可能平坦并不妨碍您正确建模问题。如果一个项目有任务,而任务只有一个项目,那么我认为您的初始设计没有任何问题。
-
我更喜欢第一个。模块化.. 因为,如果您尝试在应用程序中的任何位置访问项目列表,您最终将获取其下任务的所有信息。效率不高。
-
那么一个 Data Transport Object 用于传输数据(f.i. 将数据导入/导出到特定的 JSON/ XML/.. 格式)。 EF 的模型也是 DTO(从/向数据库传输数据)。问题中 DTO 的意图是什么?
-
希望将 DTO 与实体模型分开。我不会只公开一个 List
. -
好点。我在想我实际上会公开 List
,其中 ProjectDTO 仅具有 Name 等基本属性。
标签: c# .net entity-framework data-transfer-objects