关于DTO的定义问题。以及C#语言扩展的思考。

数据传输对象 是咱们常常用到的一个东西。有时候咱们称之为的ViewModel也属于其中之一。app

可是以往,咱们老是 复制 实体类型的一些字段 而后单首创建这些对象。而后咱们使用对象映射工具 进行值层面的映射好比AutoMapper。工具

我感受 DTO只是对实体或者持久化数据的引用及扩展
而咱们如今定义了太多的 对象。一遍又一遍地从实体copy出须要的字段 变成DTO,可是随着业务的变化,改进和迭代,涉及到实体以及众多的DTO的修改,让咱们的维护也变得更加困难(分散的,改了一个地方要改不少地方,并且有时候不免漏掉形成bug)。
这严重违反了DRY 原则对象

下面咱们看下一个新的定义方式:继承

 

class Entity{cmd

string Name;string

NewCmd:Entity|CreateDate:DBDate()
SearchQuery:Entity(!Name)|Key:DBText(20)|it

 

bool Create(NewCmd newcmd){....}class

bool Query(SearchQuery newcmd){....}扩展

}引用

NewCmd 继承了 Entity的全部字段,而且扩展了一个CreateDate字段。

SearchQuery 继承了 Entity中除了Name以外的全部字段,而且扩展了一个Key字段。

应该说这样的DTO逻辑一目了然,最重要的是当底层 Entity修改的时候。咱们的DTO也随之修改了。

 

因此 DTO在语义上 应该 是对持久化实体的引用和扩展
能够屏蔽某些字段也能够扩展某些字段

这样 就舒服了可是这须要语言层面的支持

相关文章
相关标签/搜索