我应该使用数据传输对象来包装实体吗?

3

我有一个叫做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个回答

2

我的DTO包装领域实体是错误的吗?

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

如果是的话,我是否需要为每个领域实体创建一个只包含客户端所需属性的xxxDTO“包装器”?

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

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


@rboarman 正确 - automapper 将是我的首选,但是有几个替代方案 - Sergey Kalinichenko

0
如果有什么问题,应该反过来——你的领域实体应该包装你的DTO。
DTO的目的只是以尽可能通用的方式传递数据。这意味着没有事件、没有业务逻辑等。它也不应该包含对领域实体的引用——那会失去使用DTO的目的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接