我是否应该用数据传输对象包装实体

本文关键字:对象 包装 实体 数据传输 是否 | 更新日期: 2023-09-27 18:37:28

我有一个名为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; }
}

我是否应该用数据传输对象包装实体

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

是的,这是错误的。DTO 应不包含任何逻辑 - 包括可能附加到组成 DTO 的对象上的逻辑。将域对象包含在 DTO 中会公开域逻辑,从而首先消除了使用 DTO 的主要好处。

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

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

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

如果有的话,它应该是相反的 - 你的域实体应该包装你的 DTO。

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