实体对象辨析(POCO、Entity、Model、DTO、BO、DO、PO)

POCO (Plain Old CLR Object)源自Java EE编程领域的POJO概念(2000年由Martin Fowler提出)和POTS (Plain Old Telephone Service)概念。POCO被应用于面向.NET框架的CLR (Common Language Runtime, 公共语言运行时)。但是POCO本身不依赖于外部框架,它是PLAIN的。

POCO的优点:

  • 简单数据存储机制,简化层间数据传递和序列化。
  • 可用于依赖注入和仓库(Repository)模式。
  • 减少对其它逻辑层的依赖和复杂性,实现松耦合(较高的逻辑层需要考虑POCO,POCO不关心其它任何事物)。
  • 通过简化实现可测试性。

POCO是计算机领域限定名词。

Entity是实体,代表以自身存在,实际的或潜在的、具体的或抽象的、物理的或非物理的。Entity是非计算机领域限定名词,所以有时会有Data Entity或POCO Entity。

Model是数学逻辑名词,包括有限操作的集合以及定义于其上的关系,主要用于分析、设计过程。

DTO (Data Transfer object)是数据传输实体,用于在进程间传递数据。其概念从进程间通讯到本地与远程接口(如Web服务)的通讯,每次调用都是很消耗资源和性能的操作。

DTO与BO或者DAO的区别是DTO没有任何行为(方法),只是存储和提供它所拥有数据的查询(访问器和修改器)。DTO是简单对象,不包含任何需要测试的业务逻辑。

DTO模式经常被错误地用于远程接口调用以外的场景,实际上是错误的,这意味着进程内层间调用使用的对象是不应该被称为DTO的。

应用中的所有实体(Entity)都是业务对象(Business Object),但并不是所有业务对象都是实体。业务对象(Business Object)包括包含方法的实体对象(Entity Object)和不包含方法的值对象(Value Object)。

业务实体(Business Entity)封装了高阶逻辑需要的业务逻辑或业务规则。它使用实体字段进行裁决或者在必要时修改并进行实体的序列化。

领域对象/实体/类型(Domain Object/Entity/Class)包含复杂的业务逻辑。描述了多条件下不同的行为逻辑和业务规则。领域实体与业务实体无大致区别,谈到领域实体多数情况是因其复杂的逻辑和规则。

持久化对象/实体/类型(Persistent Object/Entity/Class)主要是为了将数据保存到内存或数据库中的载体类型。

时间: 2024-07-30 04:10:37

实体对象辨析(POCO、Entity、Model、DTO、BO、DO、PO)的相关文章

正确理解DTO、值对象和POCO

今天推荐的文章比较技术化也比较简单,但是对于一些初学者而言,可能也是容易搞混的概念:就是如何理解DTO.值对象和POCO之间的区别. 所谓DTO就是数据传输对象(Data Transfer Object),POCO就是简单CLR对象(Plain Old CLR Object),概念来源于Java中的POJO:不过值对象(Value Object)并非.NET中的值类型(Value Type)的实例对象,而是领域驱动设计(Domain-Driven Design,DDD)中的概念.那么这三者是什么

修改tt模板让ADO.NET C# POCO Entity Generator With WCF Support 生成的实体类继承自定义基类

折腾几天记载一下,由于项目实际需要,从edmx生成的实体类能自动继承自定义的基类,这个基类不是从edmx文件中添加的Entityobject. 利用ADO.NET C# POCO Entity Generator With WCF Support生成的tt文件(比如model.tt)中找到 partial class partial class 修改tt模板让ADO.NET C# POCO Entity Generator With WCF Support 生成的实体类继承自定义基类

EBS OAF开发中的Java 实体对象(Entity Object)验证功能补充

(版权声明,本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处:否则请与本人联系,违者必究) EO理论上是只有产品组维护,里面包含其所有的业务逻辑,并提供相应的Expert给自己或者其它产品组使用.而VO是各个组根据需要或基于EO或者只读的SQL而建立的,里面可以根据需要添加自己的业务实现和逻辑. 对于EO内部的验证功能,在开发文档中主要介绍了三种: 1. 在setter里面实现单个属性的验证.这主要是对于没有依赖关系的属性,也就是说它的验证不需要其它会被修改的属性的支持.比如,验证

学习ASP.NET MVC(四)——我的第一个ASP.NET MVC 实体对象

今天我将根据数据库中的表结构添加一些类.这些类将成为这个ASP.NET MVC应用程序中"模型"的一部分.       我们使用Entity Framework(实体框架)来定义和使用这些模型类,并且访问数据库.实体框架 (EF) 是一种对象关系映射机制,支持 .NET 开发人员使用特定对象来处理关系数据.它消除了开发人员通常需要编写大部分数据访问代码的工作,所以也称为代码优先开发模式.使用实体框架 ,可以将自定义数据类与数据模型一起使用,而无需对数据类本身进行任何修改. 这意味着可以

简单封装sqlite3 实现实体对象与关系型数据库的相关操作【IOS】

源码如下,只有一个类文件 // //  DBHelper.h // //  Created by Jason_Msbaby on 15/10/15. //  Copyright ? 2015年 张杰. All rights reserved. // /**  *  简单封装了对于sqlite的使用 没有加入对事务及其他复杂的特性     基于传入sql语句的方式进行执行     使用单例模式     根据model对象自动创建表 只支持 NSInter NSString float 数据类型的支

Java实战之02Hibernate-02映射、一级缓存、实体对象状态

五.映射基础 1.实体类采用javabean的编写规范 JavaBean编写规范: a.类一般是public的 b.有默认的构造方法 c.字段都是私有的 d.提供公有的getter和setter方法 e.一般都实现java.io.Serializable接口 注意:hibernate采用的暴力反射 2.基本类型OR包装类型 int ---> Integer ....... 3.访问实体类数据的策略(了解) 通过上面我们可知,hibernate是采用的暴力反射,所以我们既可以通过属性页可以用过字段

c#用反射原理递归遍历复杂实体对象

之前在网上看到的都是遍历那种比较简单的实体对象,但是如果有实体嵌套,甚至是包含有List<XXInfo>这种属性的时候就没有办法处理了.通过递归遍历的方式可以完成对复杂实体对象的所有属性的遍历,可以取值和赋值. 下面是关键部分的代码,有什么不对的地方路过的大大一定要指点哈. using System.Reflection; public System.Text.StringBuilder strB = new System.Text.StringBuilder();     public vo

【Away3D代码解读】(二):渲染核心流程(简介、实体对象收集)

我之前解析过Starling的核心渲染流程,相比Away3D而言Starling真的是足够简单,不过幸运的是两者的渲染流程是大体上相似的:Starling的渲染是每帧调用Starling类中的render方法,类似的Away3D的渲染是每帧调用View3D类中的render方法,那我们要了解Away3D的渲染就需要从这个方法入手了. View3D的render方法源码: 1 /** 2 * Renders the view. 3 */ 4 public function render():voi

一个实体对象不能由多个 IEntityChangeTracker 实例引用。

错误代码 public bool addSubOptionItem(csModel.cs_Answer answers) { bool result = false; wpe = new csWeiPlatformEntities();//实例化entity对象 try { wpe.CreateObjectSet<cs_Answer>().AddObject(answers); wpe.SaveChanges(); result = true; } catch (Exception) { re