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

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

  • 相关阅读:
    A1015. Reversible Primes (20)
    A1024. Palindromic Number (25)
    A1023. Have Fun with Numbers (20)
    B1017. A除以B (20)
    A1059. Prime Factors (25)
    阵列命令
    工具面板
    圆角与镜像命令
    拉伸与缩放命令
    autium designer
  • 原文地址:https://www.cnblogs.com/SHGF/p/11230132.html
Copyright © 2011-2022 走看看