【问题标题】:Should I wrap an entity with a data transfer object我应该用数据传输对象包装实体吗
【发布时间】:2013-10-30 19:18:07
【问题描述】:

我有一个名为 SchoolyearEditRequest 的数据传输对象,它有 4 个属性保存域对象。

1) 我的 DTO 包装域实体有错吗?

2) 如果是,我是否必须为每个域实体创建一个 xxxDTO“包装器”,其中只有客户端真正需要的属性?

public class SchoolyearEditRequest
{
    // Create a SchoolclassCodeDTO ???
    // Create a SchoolyearDTO ???
    // Create a collection of TimeTableDTO`s ???

    public IEnumerable<SchoolclassCode> SchoolclassCodes { get; set; }
    public IEnumerable<TimeTable> TimeTablesWeekA { get; set; }
    public IEnumerable<TimeTable> TimeTablesWeekB { get; set; }
    public Schoolyear Schoolyear { get; set; }
}

【问题讨论】:

    标签: c# dto data-transfer-objects


    【解决方案1】:

    我的 DTO 包装域实体有错吗?

    是的,这是错误的。 DTO 应该没有任何逻辑 - 包括可能附加到组成 DTO 的对象的逻辑。将域对象包含到 DTO 中会暴露域逻辑,从而首先消除使用 DTO 的主要好处。

    如果是,我是否必须为每个域实体创建一个 xxxDTO“包装器”,其中只有客户端真正需要的属性?

    没错,就是这个意思。通过这样做,您将消除客户端和域对象之间的耦合。

    注意:通常使用映射器来简化 DTO 和域对象之间的映射过程。

    【讨论】:

    【解决方案2】:

    如果有的话,应该反过来 - 你的域实体应该包装你的 DTO。

    DTO 的目的是以尽可能通用的方式简单地携带数据。这意味着没有事件、没有业务逻辑等。它也不应该包含对域实体的引用——这违背了拥有 DTO 的目的。

    【讨论】:

      猜你喜欢
      • 2012-11-19
      • 1970-01-01
      • 2011-04-14
      • 2017-04-04
      • 1970-01-01
      • 1970-01-01
      • 2012-03-18
      • 2021-06-20
      相关资源
      最近更新 更多