我应该用数据传输对象包装一个实体

时间:2013-10-30 19:18:08

标签: c# dto data-transfer-objects

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

2 个答案:

答案 0 :(得分:2)

  

我的DTO包裹域实体是不对的?

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

  

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

正确,这就是主意。通过这样做,您将消除客户端和域对象之间的耦合。

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

答案 1 :(得分:0)

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

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