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在语义上 应该 是对持久化实体的引用和扩展
    可以屏蔽某些字段也可以扩展某些字段

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

  • 相关阅读:
    EL表达式
    单例模式
    标准标签JSTL
    五大常用算法之三:贪心算法
    python字符串处理
    判断视图存不存在
    判断插入的数据在表中存不存在
    sql因为发现对象名称 'dbo.Ct2' 和索引名称 'PK_Ct2' 有重复的键,所以ALTER TABLE ALTER COLUMN 。。。 失败。
    C# MD5算法 16 32 大小写
    制作VS2022中文离线安装包
  • 原文地址:https://www.cnblogs.com/SHGF/p/11230132.html
Copyright © 2011-2022 走看看