(此文章同时发表在本人微信公众号“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

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

定义一个dto对象_正确理解DTO、值对象和POCO相关推荐

  1. 完全理解python迭代对象_完全理解Python迭代对象、迭代器、生成器

    1.assert:python assert断言是声明其布尔值必须为真的判定,如果发生异常就说明表达示为假.可以理解assert断言语句为raise-if-not,用来测试表示式,其返回值为假,就会触 ...

  2. 小白对于学习对象和类的总结,定义一个圆柱体类Cylinder,并创建相应的对象,然后计算圆柱体的底面积和面积.

    类和对象 类:类的概念就是让程序设计能更清楚卖出日常生活中的事物,也可以理解为对一类事物的统称包含对于属性描述和行为描述!注解:属性描述:描述当前类有哪些属性.行为描述:描述当前有哪些行为.举例: 以 ...

  3. 定义一个矩形类Rectangle:(知识点:对象的创建和使用)

    /** 1:定义一个矩形类Rectangle:(知识点:对象的创建和使用)     定义三个方法:getArea()求面积.getPer()求周长,showAll()分别在控制台输出长.宽.面积.周长 ...

  4. 如何定义一个类对象并用next()的方法使用_深入理解-可迭代对象、迭代器(20个为什么)...

    2019-06-16 深入理解可迭代对象.迭代器 什么是迭代器模式? 当扫描内存中放不下的数据集时,要找到惰性获取数据项的方式,即按需一次获取一个数据项,这就是迭代器模式 迭代器构成? python没 ...

  5. python函数可以作为容器对象吗_正确理解Python函数是第一类对象

    正确理解 Python函数,能够帮助我们更好地理解 Python 装饰器.匿名函数(lambda).函数式编程等高阶技术. 函数(Function)作为程序语言中不可或缺的一部分,太稀松平常了.但函数 ...

  6. 定义一个空切片_全面解读Python高级特性切片

    大家好,欢迎来到Crossin的编程教室! 众所周知,我们可以通过索引值(或称下标)来查找序列类型(如字符串.列表.元组-)中的单个元素,那么,如果要获取一个索引区间的元素该怎么办呢? 切片(slic ...

  7. python的上下文管理用哪个关键字_正确理解python中的关键字“with”与上下文管理器...

    正确理解python中的关键字"with"与上下文管理器 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  正确理解python中的关键字&quo ...

  8. 智能的定义是什么?如何正确理解智能家居?

    近几年,智能家居是一个比较火爆的行业!有很多的人(特别是寻找好的创业的项目的朋友)想从事这个行业,也有很多是想在自己家里装上智能化,享受科技带来的生活便利:还有部分人处于对智能家居的了解期.不管你属于 ...

  9. vb6.0 定义一个公共类_纠正网上的错误:能不能自定义一个类叫java.lang.System/String?...

    前语:不要为了读文章而读文章,一定要带着问题来读文章,勤思考. 作者:一汪清水  来源:https://dwz.cn/i7Pf6VwZ 最近,学习了下java类加载相关的知识.然后看到网上有一道面试题 ...

最新文章

  1. 20141125-2
  2. 分享一个自己用的Objective-C的Http接连类
  3. Vue.js 插件开发详解
  4. Linux date命令的用法
  5. ExtJs常用数据源store
  6. 两个序列的中位数c语言,小白在线求教 用归并排序实现查找两个有序序列的中位数...
  7. matlab dynprog,动态规划算法
  8. sqlhelper 下载 使用指南 代码 [收藏]
  9. Deep Learning 博文推荐和学习资料
  10. 大学生活没钱你会学习还是打工? C2 翻译有感
  11. Atitit json array to csv 目录 1. Lib 1 1.1. Apache csv lib 1 1.2. Org.json.jar cdl模式 1 2. other 1 2
  12. nas 和 远程文件夹同步_群晖NAS同步文件夹功能打开有什么需要注意的?
  13. 在windows 2003系统上安装诺基亚pc套件的方法
  14. Android篮球计分器课程设计,篮球计分器课程设计详解.doc
  15. 万能五笔输入法弹窗_万能五笔输入法广告如何彻底关闭
  16. 各种工作面板护眼模式颜色设置
  17. 边缘化(marginalization )和稀疏化(sparsification)---ceres-solver
  18. find函数的使用方法Matlab,matlab中find函数的使用说明——emily语法介绍
  19. scanf提取gprmc数据
  20. 【20保研】山东财经大学关于举办2019年优秀大学生夏令营的通知

热门文章

  1. python模拟ATM + 购物商城
  2. PHP配置问题:AppServ安装discuz出错 Fatal error:
  3. 解决ftp限制用户访问上层目录后无法登陆问题
  4. bootstrap-反色导航条
  5. 【No.3 Ionic】超级逗表情 App
  6. 不透明度opacity进阶
  7. VC++软件工程师高端培训
  8. OpenCV成长之路:图像滤波
  9. docker的网络模式
  10. Python爬虫之BeautifulSoup和requests的使用