服务模块划分规范

一、PO :(persistant object ),持久对象

可以看成是与数据库中的表相映射的java对象。使用Hibernate来生成PO是不错的选择。

二、VO :(value object) ,值对象

通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要.

PO只能用在数据层,VO用在商业逻辑层和表示层。各层操作属于该层自己的数据对象,这样就可以降低各层之间的耦合,便于以后系统的维护和扩展。

三、DAO :(Data Access Objects) ,数据访问对象接口

DAO是Data Access Object数据访问接口,数据访问:顾名思义就是与数据库打交道。夹在业务逻辑与数据库资源中间。

J2EE开发人员使用数据访问对象(DAO)设计模式把底层的数据访问逻辑和高层的商务逻辑分开.实现DAO模式能够更加专注于编写数据访问代码.

DAO模式是标准的J2EE设计模式之一.开发人员使用这个模式把底层的数据访问操作和上层的商务逻辑分开.一个典型的DAO实现有下列几个组件:

  1. 一个DAO工厂类;
  2. 一个DAO接口;
  3. 一个实现DAO接口的具体类;
  4. 数据传递对象(有些时候叫做值对象).

具体的DAO类包含了从特定的数据源访问数据的逻辑。

四、BO :(Business Object),业务对象层

表示应用程序领域内“事物”的所有实体类。这些实体类驻留在服务器上,并利用服务类来协助完成它们的职责。

五、DTO Data Transfer Object数据传输对象

主要用于远程调用等需要大量传输对象的地方。比如我们一张表有100个字段,那么对应的PO就有100个属性。但是我们界面上只要显示10个字段,客户端用WEB service来获取数据,没有必要把整个PO对象传递到客户端,这时我们就可以用只有这10个属性的DTO来传递结果到客户端,这样也不会暴露服务端表结构.到达客户端以后,如果用这个对象来对应界面显示,那此时它的身份就转为VO

六、POJO :(Plain Old Java Objects),简单的Java对象

实际就是普通JavaBeans,使用POJO名称是为了避免和EJB混淆起来, 而且简称比较直接.其中有一些属性及其getter、setter方法的类,有时可以作为value object或dto(Data Transform Object)来使用.当然,如果你有一个简单的运算属性也是可以的,但不允许有业务方法,也不能携带有connection之类的方法

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

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

相关文章

功能问题:如何用Docker部署一个后端项目?

大家好,我是大澈! 本文约1800字,整篇阅读大约需要3分钟。 关注微信公众号:“程序员大澈”,免费加入问答群,一起交流技术难题与未来! 现在关注公众号,免费送你 ”前后端入行大礼包…

老卫带你学---leetcode刷题(204. 计数质数)

204. 计数质数 问题 示例 1: 输入:n 10 输出:4 解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。 示例 2: 输入:n 0 输出:0 示例 3: 输入:n 1 输出&#x…

SwiftU的组件 - TabView

SwiftU的组件 - TabView 记录一下SwiftU的组件 - TabView的两种style分别的使用方式 import SwiftUIstruct TabViewBootCamp: View {State var selectedIndex 0var body: some View {NavigationView {TabView(selection: $selectedIndex) {HomeView(selectedIndex: $selected…

基于python的《彩图版飞机大战》程序使用说明(附源码下载)

在PyCharm中运行《彩图版飞机大战》即可进入如图1所示的游戏界面。 图1 游戏主界面 具体的操作步骤如下: (1)玩游戏。在游戏主界面中,从屏幕的顶部不断出现下落的敌机,玩家按下键盘上的↑、↓、←、→方向键移动飞机…

springboot的自动配置原理

1.通过SpringBootConfiguration 引入了EnableAutoConfiguration(负责启动自动配置功能) 2.EnableAutoConfiguration 引入了import 3.Spring容器启动时:加我loc容器时会解析import 注解 4.import导入了一个deferredimprotSelector(它会使SpringBoot的自…

Android 深入Http(2)加密与编码

可以对二进制数据(比如图片、视频) 经典算法: DES(密钥短被弃用了) AES (密钥很长 很顶) 速度快,效率高 IDEA 3DES(三重DES,听起来就很慢和重 &#xf…

高性能服务系列【八】C10M时代,网络IO库需要重建

在目前网络上能搜索到的,关于网络IO模型的文章,基本都是关于多路复用的iocp/epoll的,这些技术是为了解决C10K问题而提出的解决方案。现代网卡已经普遍支持10Gb,100Gb也不少见,这些解决方案已经无法提升性能的需求。 我…

VGG论文学习笔记

题目:VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION 论文下载地址:VGG论文 摘要 目的:研究深度对精度的影响 方法:使用3*3滤波器不断增加深度,16和19效果显著 成绩:在ImageNet 20…

编译nodejs源码(包括升级gcc)

记录背景 因为之前过rs的时候找大佬要的 魔改的 node, 但是只有 win版本,当时大佬把源码给了我一份,工作需要在 linux 上运行, 特此记录下编译过程 环境准备 centos7.9 1. gcc 升级, 默认是低版本1. yum -y install centos-re…

docker内部无法使用ping等网络工具解决方案

通常docker内部没有网络,所以我们先离线安装需要的依赖包,然后再使用sh脚本容器内部访问宿主机同网络端其他服务器ip,实现监测远程ip telnet包依赖于netbase包,但是netbase包没有安装。你需要先安装netbase包,然后再尝试安装teln…

MySQL主键采用什么结构?为什么要自增?为什么用int?

MySQL主键通常采用的是自增的整数类型结构。 在MySQL中,主键是用来唯一标识表中每一行记录的一个列或多个列的组合,其值能保证每条记录的唯一性。主键的选择对于数据库的性能和数据完整性都至关重要。通常情况下,MySQL主键采用的结构是自增的…

搭建知识管理系统并不复杂,这篇教程来帮你

许多人都有这样的体验:我们抓住的想法和知识总在不经意间溜走,我们想要的信息总是一时无法找到。因此,搭建一个能够系统化、分类和索引存储这些知识的“知识管理系统”是必要的。听上去很专业,其实并不复杂,让我们一步…

mysql: 如何开启慢查询日志?

1 确认慢查询日志功能已开启 执行以下sql语句,查看慢查询功能是否开启: show VARIABLES like slow_query_log;如果为ON,表示打开;如果为OFF,表示没有打开,需要开启慢查询功能。 执行以下sql语句&#xff0…

修改 MySQL update_time 默认值的坑

由于按规范需要对 update_time 字段需要对它做默认值的设置 现在有一个原始的表是这样的 CREATE TABLE test_up (id bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 主键id,update_time datetime default null COMMENT 操作时间,PRIMARY KEY (id) ) ENGINEInnoDB DEF…

内存中的数据存储(未完)

整数在内存中的存储 在前面说过整数的2进制表示方法有三种,即 原码、反码和补码。三种表⽰⽅法均有符号位和数值位两部分,符号位都是⽤0表⽰“正”,⽤1表⽰“负”,⽽数值位最⾼位的⼀位是被当做符号位,剩余的都是数值位…

MapStruct代替BeanUtils.copyProperties ()使用

1.为什么MapStruct代替BeanUtils.copyProperties () 第一:因为BeanUtils 采用反射的机制动态去进行拷贝映射,特别是Apache的BeanUtils的性能很差,而且并不支持所有数据类型的拷贝,虽然使用较为方便,但是强烈不建议使用…

【C++】每日一题 101 对称二叉树

给你一个二叉树的根节点 root , 检查它是否轴对称。 struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(NULL), right(NULL) {} };bool isSymmetric(TreeNode* root) {if (root nullptr) {return true;}return isMirror(r…

基于openpose的引体向上的识别计数统计项目(5)CPoseClassify类设计与实现

和CPoseExtract一样, CPoseClassify设计为一个纯虚类,规定了基本的调用接口函数,便于后续扩展使用。该类主要用于判断一帧骨骼关键点数据属于引体向上动作中的状态类型。 // https://www.wikihow.com/Do-a-Chin-Up enum PullupCls {None = -1, // 未知占位Drape = 0, // …

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:NavRouter)

导航组件,默认提供点击响应处理,不需要开发者自定义点击事件逻辑。 说明: 该组件从API Version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 必须包含两个子组件,其中第二个子组…

【趣味学算法】08 凯撒密码

注: 本系列仅为个人学习笔记,学习内容为《算法小讲堂》(视频传送门),通俗易懂适合编程入门小白,需要具备python语言基础,本人小白,如内容有误感谢您的批评指正 《罗马帝王传》中描述…