理解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使用。
时间: 2024-10-06 18:06:55

理解POCO的相关文章

(转)理解POCO

POCO的概念是从java的POJO借用而来,而两者的含义是一致的,不同的仅仅是使用的语言不一样.所以POCO的解释就是“Plain Old C# Object”. 从字面上翻译为“纯洁老式的C#对象对象”, 理解POCO先要理解POJO 1.什么是POJO POJO的名称有多种,pure old java object .plain ordinary java object 等. 按照Martin Fowler的解释是“Plain Old Java Object”,从字面上翻译为“纯洁老式的j

POCO Controller 你这么厉害,ASP.NET vNext 知道吗?

写在前面 阅读目录: POCO 是什么? 为什么会有 POJO? POJO 的意义 POJO 与 PO.VO 的区别 POJO 的扩展 POCO VS DTO Controller 是什么? 关于 POCO Controller POCO Controller 应用 识别 POCO Controller 简单 POCO Controller IActionResultHelper IModelMetadataProvider.ViewDataDictionary IActionDiscovery

正确理解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)中的概念.那么这三者是什么

POCO库——Foundation组件之核心Core

核心Core: Version.h:版本控制信息,宏POCO_VERSION,值格式采用0xAABBCCDD,分别代表主版本.次版本.补丁版本.预发布版本: Poco.h:简单地包含了头文件Foundation.h: Foundation.h:使用其他任何Foundation模块前需要包含的头文件,主要定义库导出宏POCO_DLL.Foundation_API以及自动连接相应配置正确的库引用文件lib:包含库配置文件Config.h: 平台相关的Platform.h以及各个平台相应的文件Plat

DDD学习笔录——领域驱动设计的常见误区(即错误的理解)

可以将DDD看成一种开发思想体系:它促成了一种新的以领域为中心的思维方式. 它是一种学习过程,而非最终目标,这就是DDD的最大优势. 任何团队都可以编写一个软件来满足一组用例的需求,但那些将时间和精力花在其正在处理的问题域中的团队则能够持续演化产品以满足新的业务用例. DDD本身并非一种严格的方法论,而是必须与一些迭代式软件项目方法论结合使用以构建并演化一个有用的模型. 由此可见下面的这些理解,存在很大的误区: 1.战术模式是DDD的关键 这明显不对,DDD并不是一种面向对象的设计,也不是一种以

Poco vs Boost(Poco也有不少优点,特别是网络功能更强)

POCO的优点: 1) 比boost更好的线程库,特别是一个活动的方法的实现,并且还可设置线程的优先级. 2) 比 boost:asio更全面的网络库.但是boost:asio也是一个非常好的网络库. 3) 包含了一些Boost所不包含的功能,像XML,数据库接口等. 4) 跟Boost相比,集成度更高,是更加统一的一个库. 5) Poco的c++代码更清洁,现代和易理解.对不是模板编程专家的人来说,POCO的代码比大多数Boost库容易理解得多 6) 可以在许多平台上使用 POCO的缺点: 1

poco c++框架:本质概述

使用了poco c++库一段时间了,深刻体会到它的便利性.和Qt框架库相比,poco框架库虽然不那么肥美,但胜在"轻巧".在它的应用场景中,可得心应手. POCO C++库 是开源的用于简化和加速C++开发面向网络.可移植应用程序的C++库集,POCO库和C++标准库,可以很好的集成并填补了C++标准库缺乏的功能空隙. POCO库的模块化.高效的设计及实现使得POCO特别适合嵌入式开发.在嵌入式开发领域,由于C++既适合底层(设备I/O.中断处理等)和高层面向对 象开发,越来越流行.当

poco c++ 框架: Util 读取配置文件

在程序启动前,总要配置一些参数,常用的如服务器的端口号,服务器的地址,这些启动参数就要使用本节中的知识来加载.下面给出能调试的案例,在代码中理解配置文件读取方法.  一读取ini格式的文件 1.1直接加载配置文件 1.1.2配置文件poco.ini(和程序同名) poco.ini: name  = "linyanwen" sport = 25 1.1.2例程 #include <Poco/Util/ServerApplication.h> #include <Poco

poco c++和Boost库的对比分析

POCO的优点:  1) 比boost更好的线程库,特别是一个活动的方法的实现,并且还可设置线程的优先级. 2) 比 boost:asio更全面的网络库.但是boost:asio也是一个非常好的网络库. 3) 包含了一些Boost所不包含的功能,像XML,数据库接口等. 4) 跟Boost相比,集成度更高,是更加统一的一个库. 5) Poco的c++代码更清洁,现代和易理解.对不是模板编程专家的人来说,POCO的代码比大多数Boost库容易理解得多 6) 可以在许多平台上使用 POCO的缺点: