定义一个dto对象_正确理解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
你可以“阅读原文”来查看其中的配图,对上面的结论更是一目了然。
定义一个dto对象_正确理解DTO、值对象和POCO相关推荐
- 完全理解python迭代对象_完全理解Python迭代对象、迭代器、生成器
1.assert:python assert断言是声明其布尔值必须为真的判定,如果发生异常就说明表达示为假.可以理解assert断言语句为raise-if-not,用来测试表示式,其返回值为假,就会触 ...
- 小白对于学习对象和类的总结,定义一个圆柱体类Cylinder,并创建相应的对象,然后计算圆柱体的底面积和面积.
类和对象 类:类的概念就是让程序设计能更清楚卖出日常生活中的事物,也可以理解为对一类事物的统称包含对于属性描述和行为描述!注解:属性描述:描述当前类有哪些属性.行为描述:描述当前有哪些行为.举例: 以 ...
- 定义一个矩形类Rectangle:(知识点:对象的创建和使用)
/** 1:定义一个矩形类Rectangle:(知识点:对象的创建和使用) 定义三个方法:getArea()求面积.getPer()求周长,showAll()分别在控制台输出长.宽.面积.周长 ...
- 如何定义一个类对象并用next()的方法使用_深入理解-可迭代对象、迭代器(20个为什么)...
2019-06-16 深入理解可迭代对象.迭代器 什么是迭代器模式? 当扫描内存中放不下的数据集时,要找到惰性获取数据项的方式,即按需一次获取一个数据项,这就是迭代器模式 迭代器构成? python没 ...
- python函数可以作为容器对象吗_正确理解Python函数是第一类对象
正确理解 Python函数,能够帮助我们更好地理解 Python 装饰器.匿名函数(lambda).函数式编程等高阶技术. 函数(Function)作为程序语言中不可或缺的一部分,太稀松平常了.但函数 ...
- 定义一个空切片_全面解读Python高级特性切片
大家好,欢迎来到Crossin的编程教室! 众所周知,我们可以通过索引值(或称下标)来查找序列类型(如字符串.列表.元组-)中的单个元素,那么,如果要获取一个索引区间的元素该怎么办呢? 切片(slic ...
- python的上下文管理用哪个关键字_正确理解python中的关键字“with”与上下文管理器...
正确理解python中的关键字"with"与上下文管理器 来源:中文源码网 浏览: 次 日期:2018年9月2日 [下载文档: 正确理解python中的关键字&quo ...
- 智能的定义是什么?如何正确理解智能家居?
近几年,智能家居是一个比较火爆的行业!有很多的人(特别是寻找好的创业的项目的朋友)想从事这个行业,也有很多是想在自己家里装上智能化,享受科技带来的生活便利:还有部分人处于对智能家居的了解期.不管你属于 ...
- vb6.0 定义一个公共类_纠正网上的错误:能不能自定义一个类叫java.lang.System/String?...
前语:不要为了读文章而读文章,一定要带着问题来读文章,勤思考. 作者:一汪清水 来源:https://dwz.cn/i7Pf6VwZ 最近,学习了下java类加载相关的知识.然后看到网上有一道面试题 ...
最新文章
- 20141125-2
- 分享一个自己用的Objective-C的Http接连类
- Vue.js 插件开发详解
- Linux date命令的用法
- ExtJs常用数据源store
- 两个序列的中位数c语言,小白在线求教 用归并排序实现查找两个有序序列的中位数...
- matlab dynprog,动态规划算法
- sqlhelper 下载 使用指南 代码 [收藏]
- Deep Learning 博文推荐和学习资料
- 大学生活没钱你会学习还是打工? C2 翻译有感
- 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
- nas 和 远程文件夹同步_群晖NAS同步文件夹功能打开有什么需要注意的?
- 在windows 2003系统上安装诺基亚pc套件的方法
- Android篮球计分器课程设计,篮球计分器课程设计详解.doc
- 万能五笔输入法弹窗_万能五笔输入法广告如何彻底关闭
- 各种工作面板护眼模式颜色设置
- 边缘化(marginalization )和稀疏化(sparsification)---ceres-solver
- find函数的使用方法Matlab,matlab中find函数的使用说明——emily语法介绍
- scanf提取gprmc数据
- 【20保研】山东财经大学关于举办2019年优秀大学生夏令营的通知