zoukankan      html  css  js  c++  java
  • 正确理解DTO、值对象和POCO

    (此文章同时发表在本人微信公众号“dotNET每日精华文章”)

    今天推荐的文章比较技术化也比较简单,但是对于一些初学者而言,可能也是容易搞混的概念:就是如何理解DTO、值对象和POCO之间的区别。

    所谓DTO就是数据传输对象(Data Transfer Object),POCO就是简单CLR对象(Plain Old CLR Object),概念来源于Java中的POJO;不过值对象(Value Object)并非.NET中的值类型(Value Type)的实例对象,而是领域驱动设计(Domain-Driven Design,DDD)中的概念。那么这三者是什么关系呢?Vladimir Khorikov专门发表了一篇文章来解释这个问题。

    首先,他给它们进行了更加准确的定义:

    • DTO是表示数据的对象,但是其中不包含任何业务逻辑
    • 值对象是一个完整的领域模型,不仅包含数据,还有逻辑
    • 从值对象还引申出实体对象(Entity),实体对象和值对象的概念比较接近,只是实体对象一般会基于标识ID要区分两个实例
    • POCO概念来源于POJO,POJO概念由Martin Fowler(我还有幸和他一起共进过两次晚餐)提出,是JavaBeans这种重量级企业构造件对象的对立概念,也即这种类不继承于任何对象(或者说直接继承于Object);同理,POCO可以看作是继承自System.ComponentModel命名空间中的Component对象的对立对象,或者是EF 4.0之前必须继承于EntityObject基类的实体对象的对立对象。可以说,理解了非POCO的概念,也即理解了POCO概念。
    • 而POCO代表了可以用于领域模型的尽可能简单的对象,而POCO是可以包含逻辑的。

    根据以上定义,我们得到这样几个结论:

    • POCO是DTO和值对象的超集
    • DTO不能等同于值对象
    • DTO和值对象都不能有标识Id,而POCO可以有标识Id

    你可以“阅读原文”来查看其中的配图,对上面的结论更是一目了然。

    原文地址:http://enterprisecraftsmanship.com/2015/04/13/dto-vs-value-object-vs-poco/

  • 相关阅读:
    2016.7.26
    2016.7.25
    2016.7.24
    C/C++基本数据类型所占字节数
    几个STL算法:includes,set_difference、set_intersection、set_symmetric_difference、set_union, pre_permutation, next_permutation
    h5 如何打包apk
    Ajax XMLHttpRequest对象的三个属性以及open和send方法
    twisted 使用
    python 的内建函数
    python中的 json 模块使用
  • 原文地址:https://www.cnblogs.com/redmoon/p/4467485.html
Copyright © 2011-2022 走看看