zoukankan      html  css  js  c++  java
  • 关于DTO的定义问题。以及C#语言扩展的思考。

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

    但是以往,我们总是 复制 实体类型的一些字段 然后单独创建这些对象。然后我们使用对象映射工具 进行值层面的映射比如AutoMapper。

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

    下面我们看下一个新的定义方式:

    class Entity{

    string Name;

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

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

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

    }

    NewCmd 继承了 Entity的所有字段,并且扩展了一个CreateDate字段。

    SearchQuery 继承了 Entity中除了Name之外的所有字段,并且扩展了一个Key字段。

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

    所以 DTO在语义上 应该 是对持久化实体的引用和扩展
    可以屏蔽某些字段也可以扩展某些字段

    这样 就舒服了
    但是这需要语言层面的支持

  • 相关阅读:
    模-数(A/D)转换器
    数-模(D/A)转换器
    VIM 常用命令
    Linux常用命令
    一个开关电源传导、辐射处理案例-----Layout环路
    解决:PADS导入.DXF结构图出现坐标超出范围问题
    Python3-threading模块-多线程
    Python3-socketserver模块-网络服务器框架
    Python3-socket模块-低级网络接口
    Python3-面向对象
  • 原文地址:https://www.cnblogs.com/SHGF/p/11230132.html
Copyright © 2011-2022 走看看