【转】理解POCO

 理解POCO(Plain Old CLR Object)先要理解POJO。

  1、什么是POJO?

  POJO的名称有多种,pure old java object 、plain ordinary java object 等。
  按照Martin Fowler的解释是“Plain Old Java Object”,从字面上翻译为“纯洁老式的java对象”,但大家都使用“简单java对象”来称呼它。

  POJO的内在含义是指那些没有从任何类继承、也没有实现任何接口,更没有被其它框架侵入的java对象。
  POCO的概念是从java的POJO借用而来,而两者的含义是一致的,不同的仅仅是使用的语言不一样。所以POCO的解释就是“Plain Old C# Object”。

  2、为什么会有POJO?

  主要是Java的开发者被EJB的繁杂搞怕了,大家经过反思,又回归“纯洁老式”的JavaBean,即有无参构造函数,每个字段都有getter和setter的java类。

  3、POJO的意义

  POJO让开发者可专注于业务逻辑和脱离框架的单元测试。除此之外, 由于POJO并不须要继承框架的类或实现其接口,开发者能够极其灵活地搭建继承结构和建造应用。
  POJO的意义就在于它的简单而灵活性,因为它的简单和灵活,使得POJO能够任意扩展,从而胜任多个场合,也就让一个模型贯穿多个层成为现实。
  先写一个核心POJO,然后实现业务逻辑接口和持久化接口,就成了Domain Model; UI需要使用时,就实现数据绑定接口,变成VO(View Object)。

  4、POJO与PO、VO的区别
  POJO是指简单java对象(Plain Old Java Objects、pure old java object 或者 plain ordinary java object)。
  PO是指持久对象(persistant object持久对象)。
  VO是指值对象或者View对象(Value Object、View Object)。注意,本文的VO特指View Object。
  持久对象实际上必须对应数据库中的entity,所以和POJO有所区别。比如说POJO是由new创建,由GC回收。但是持久对象是 insert数据库创建,由数据库delete删除的。基本上持久对象   生命周期和数据库密切相关。另外持久对象往往只能存在一个数据库 Connection之中,Connnection关闭以后,持久对象就不存在了,而POJO只要不被GC回收,总是存在的。
  由于存在诸多差别,因此持久对象PO(Persistent Object)在代码上肯定和POJO不同,起码PO相对于POJO会增加一些用来管理数据库entity状态的属性和方法。而ORM追求的目标就是要 PO在使用上尽量和POJO一致,对于程序员来说,他们可以把PO当做POJO来用,而感觉不到PO的存在。

  5、POJO的扩展

  POJO仅包含最简单的字段属性,没有多余的东西,它本质上就是一个普通的JavaBean。
    但是在POJO的基础上,能够扩展出不同的对象。

  • 为POJO增加了持久化的方法(Insert、Update、Delete……)之后,POJO就变成了PO。
  • 为POJO增加了数据绑定功能之后,POJO就变成了View Object,即UI Model。
  • 为POJO增加业务逻辑的方法(比如单据审核、转帐……)之后,POJO就变成了Domain Model。
  • POJO还可以当作DTO使用。

转载于:https://www.cnblogs.com/ToughGuy/p/3484197.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/363185.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

『ExtJS』01 001. ExtJS 4 类的定义

ExtJS 4 类的定义类的定义与类方法的调用 样例代码// Define new class Vehicle under the Cookbook namespaceExt.define(Cookbook.Vehicle, {// class configuration goes hereManufacturer : Aston Martin,Model : Vanquish,getDetails : function() {alert(I am an this…

HashMap底层实现原理及面试问题

①HashMap的工作原理 HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象。当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,让后找到bucket位置来储存值对象。当获取对象时,通过键对象…

Neo4j 2.1:传递节点ID与UNWIND

在发布Neo4j 2.1时,我们将具有UNWIND子句,该子句使处理事物集合更加容易。 在我的有关创建邻接矩阵的博客文章中,我们想要显示按字母顺序排列的前5个见面组中有多少人,然后检查其他各组中有多少人。 没有UNWIND子句,…

使用C#調用外部程式或是執行DOS命令

在.NET裡要如何調用外部程式呢?? 在.net裡,提供了Process類,提供我們強大的調用外部工具功能,並透過重新導向輸入與輸出,可以取得執行結果,下面就用一個例子來示範在一個WinForm裡輸入一個Dos命令,然後呼…

flex 学习篇 ---- 导航类容器

导航类容器需要使用<mx:ViewStack />。可以直接从ui设计器中拉控件过去舞台或者手动敲代码。 导航类容器就是相当于创建了一个菜单&#xff0c;然后按每个选项都可以进入到不同的页面。 创建了<mx:ViewStack>之后需要为它指定id号。 <mx:ViewStack id"vi…

SQLiteOpenHelper+ContentProvider的使用

效果图&#xff1a; PetDbHelper package com.example.admin.pets;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import com.example.admin.pets.PetContract.PetEntry;public class PetDb…

[Mac入门] 如果更快的打开程序或文件

今天有位网友问我在Windows下可以用CtrlR快速打开程序/文件夹等&#xff0c;在Mac下有没有相类似的功能&#xff1f;本文将介绍一些我的一般做法。 1.Windows下的CtrlR是什么&#xff1f; 我打算从解释CtrlR开始说起&#xff0c;希望朋友们别嫌烦&#xff5e;。Windows下系统全…

Install Shield制作安装包技巧(SQL篇)

1、检查SQL Server是否安装prototype CheckSQL(); function CheckSQL()BOOL bSuccess;NUMBER nType, nvSize;STRING szVer; STRING szSetupVer, szSetupPath;beginRegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE );szSetupPath "SOFTWARE\\Microsoft\\MSSQLServer\\Setup&quo…

ActiveMQ –经纪人网络解释–第4部分

在前面的第3部分中 &#xff0c;我们已经看到ActiveMQ如何帮助将远程使用者与本地使用者区分开来&#xff0c;这有助于确定从消息生产者到使用者的较短路径。 在第4部分中&#xff0c;我们将研究如何在远程代理上负载均衡并发使用者。 让我们考虑一些高级配置&#xff0c;以平…

总结CSS3新特性(选择器篇)

CSS3新增了嗯- -21个选择器,脚本通过控制台在这里运行; ~: p ~ p {color : red;/*此条规则将用于p后边所有的p...就是除了第一个p的所有p,规则同p:not(:nth-of-type(1)),但是权重要低于后者*/} [attribute^value]: 选择该属性以特定值开头的元素 [attribute$value]: 选择该属…

js获取地址栏信息

设置或获取对象指定的文件名或路径。 window.location.pathname例&#xff1a;http://localhost:8086/topic/index?topicId361alert(window.location.pathname); 则输出&#xff1a;/topic/index设置或获取整个 URL 为字符串。window.location.href例&#xff1a;http://local…

在NIO.2中使用文件和目录

在先前的文章中&#xff0c;我讨论了文件和目录的创建&#xff08; 创建文件和目录 &#xff09;以及选择&#xff08; 列出和过滤目录内容 &#xff09;。 采取的最后一个合乎逻辑的步骤是探索我们如何使用它们以及如何使用它们。 这是库的一部分&#xff0c;它经过了重新设计…

工作流的设计,业务流程图的绘制与编辑,工作流软件,工作流源代码组件库,开发平台,开发引擎...

基于业务流程的工作流系统在当前的软件工业中占据着非常重要的部分&#xff0c;开发此类系统, 最困难的部分就是业务流程建模和电子表单的可视化界面部分,这部分界面要求有快速的响应时间, 完善的逻辑关系,以及根据需求不断变化而必须具备的灵活编辑功能. E-Form可视化图形源码…

upload file more than 4MB

http://www.websupergoo.com/abcupload.net-1.htm 转载于:https://www.cnblogs.com/stevengeng/archive/2004/12/30/84274.html

Ajax全接触(1)

Ajax全称&#xff1a;Asynchronous JavaScript and XML(异步的JavaScript和XML) .Ajax不是某种编程语言 是一种在无需重新加载整个网页的情况之下能够更新部分网页的技术。 后面引入XMLHttpRequest对象用于后台和服务器交换数据&#xff0c;可以在不重新加载整个页面的前提下…

关于hibernate字段映射@colunm出现的问题以及jpa驼峰大写转_小写的问题探究

关于hibernate字段映射colunm出现的问题以及jpa驼峰大写转_小写的问题探究2018年04月24日 15:47:26 守望dfdfdf 阅读数&#xff1a;735 标签&#xff1a; colunmhibernate表映射实体类 更多个人分类&#xff1a; 工作 问题编辑版权声明&#xff1a;本文为博主原创文章&#xff…

窗口模版

窗口模版 1. 定义窗口模版的ID 在wgui_categories_defs.h文件中有枚举enum MMI_CATEGORY_ID_LIST 首先要在MMI_CATEGORY_ID_LIST中添加窗口模版的ID&#xff0c;例如&#xff1a; MMI_CATEGORY36_ID 2. 控件坐标和控件数组的定义 CustCoordinates.c (plutommi"…

玩Java 8 – Lambda,路径和文件

我最近需要读取一堆文件&#xff0c;而不是仅仅抓住我和可能是大多数开发人员拥有的旧FileUtils.java&#xff0c;然后从一个项目复制到另一个项目&#xff0c;我决定快速了解其他方法。 是的&#xff0c;我知道有Commons IO和Google IO &#xff0c;我为什么还要打扰&#xf…

vs.net2003无法打开.NET的Web应用服务

今天想打开web项目时提示&#xff1a;Visual Studio .NET 已检测到指定的Web服务器运行的不是ASP.NET 1.1版。您将无法运行ASP.NET Web应用原因大概是自己原来安装VS.NET2003时没有安装IIS&#xff0c;后来才装上的。自己重新安装了.NET Framework1.1还是不行。后来找到了找这个…

vue组件-使用插槽分发内容(slot)

slot--使用插槽分发内容&#xff08;位置、槽口&#xff1b;作用: 占个位置&#xff09; 官网API&#xff1a; https://cn.vuejs.org/v2/guide/components.html#使用插槽分发内容 使用组件时&#xff0c;有时子组件不知道会收到什么内容&#xff0c;这是由父组件决定的。 一…