文档章节

项目结构及项目对象

郑浩
 郑浩
发布于 2015/04/21 11:08
字数 1089
阅读 52
收藏 1

我按自己的理解重新定义系统用户对象(访客、会员、管理员 ....)、用户功能操作、业务处理对象、数据对象、数据访问对象。期望能按java的面向对象思想用对象定义的方式重新规划项目。并能与spring、strust 等流行框架不冲突。

总体思路为:用户向系统发送操作指令,系统针对用户操作执行对应业务处理流程。业务处理流程中产生数据对象,最终业务处理流程使用数据访问对象对数据对象执行CRUD操作。

系统核心对象:用户对象(UserObject),业务处理对象(Business Objects),数据对象(Data Object),数据访问对象(Data Access Object)。

优点:用户对象 与 数据对象分离,摆脱对象定义的混乱。 比如我们系统中经常用到 Member 对象,会定义 MemberBO,MemberDAO 等等。 然后里面写一堆方法,MemberBO中放与member 相关的业务处理方法,MemberDAO中放与member表相关的CRUD方法。  可是,这个Member 到底是一个用户,还是一张数据表呢? 好像都可以又好像都不可以。比如会员下订单操作(CreateOrder),这个操作是放在 MemberBO中呢?还是放在OrderBO中呢?

这个问题主要就是对象定义不明确产生的。 如果我们将用户对象(User Object)、数据对象(Data Object)分开就不会有问题了。 

比如:会员是系统用户的一种,我们定义 MemberUO,所有会员能对系统发送的操作指令都定义为这个类的方法。比如:下订单就定义为:MemberUO.createOrder() 。而会员数据对象定义为 MemberInfoDO,这个对象理解为系统执行业务流程过程中产生的数据对象。 比如:会员执行注册操作,系统通过“会员注册业务处理流程”产生会员信息对象,最终保存到数据库中。

这样,我们的对象定义就清晰了。 会员用户执行操作,系统针对用户操作执行业务处理流程生成数据对象,最终保存到数据库中。可表达为:

  1. MemberUO.regist();

  2. MemberInfoDO=MemberBO.regist();

  3. MemberInfoDAO.save(MemberInfoDO);

同样的:下订单这个操作是会员发起,那么操作方法自然应该定义在MemberUO中,比如: MemberUO.createOder();

对应的,MemberBO中定义创建订单业务流程处理方法,比如: MemberBO.createOrder(); 

在业务处理流程中产生 订单数据对象, OrderInfoDO, 最终 MemberBO 使用 OrderInfoDAO 保存 OrderInfoDO。比如: OrderInfoDAO.save(OrderInfoDO)。

Look,BO 与 UO 是对应的(MemberBO 里的业务处理方法,对应 MemberUO 中的功能操作方法)而DAO 与 DO 是对应的 (OrderDAO 操作的是 OrderDO)。

最后,框架的整合。结合spring mvc,可以轻松实现。 我们只要把 MemberUO 在spring中打上 @Controller 标签,把MemberUO 中的所有方法 打上 @RequestMapping 就可以了。 所有 UO 中的方法都可以一一对应现实用户的功能操作。

注意:MemberBO 是系统针对 MemberUO 所有功能操作的业务处理方法集,而不是针对数据对象的(MemberInfoDO)。所以我们很自然的把 CreateOrder 业务处理方法放在 MemberBO 中,而不是放在 OrderBO中。

实际上,在整个系统中 Order 都不是一个用户对象, 他只是一个数据对象(OrderInfoDO)。所以不会有 OrderUO ,也不会有OrderBO。同样的还有 产品对象、保单对象、存款对象 等等。 切记,这些对象只是用户在执行系统功能时,系统执行业务处理流程过程中产生的数据信息。 通常他们也是造成系统对象定义混乱的原因。

© 著作权归作者所有

共有 人打赏支持
上一篇: 关于REST
郑浩
粉丝 0
博文 8
码字总数 6298
作品 0
闵行
部门经理
私信 提问
Mock 数据生成服务--MockData

用于开发环境的Mock数据生成服务 演示项目地址 接口文档地址 Readme地址 使用 1、安装项目依赖 npm install 2、构建项目 npm run build 3、启动项目 npm run start 自定义数据结构 普通对象定...

白衣凡尘
2017/07/03
221
1
小林攻城狮/dp-GEN

dp-GEN 基于velocity框架的代码生成工具,根据数据库表结构生成sql、dao、manager、service、controller、html、js基础代码,能快速生成基本代码或模块脚手架。生成代码能直接用于dp-LTE、d...

小林攻城狮
2017/09/02
0
0
Service 和Dao的两种方式

方式一 方式二 一个大型的项目,在关注它的功能需求外,更要保证它的非功能性需求。 也就是说,性能、吞吐量、可扩展、可维护、可伸缩、安全等一系列的非功能性需求。 对于结构1来说,每个s...

lee123lee
2013/09/21
0
0
react开发-----代码组织

最近对自己工作上的项目和业余时间写的项目总结了一下。有挺多感受,在此记录下学习到的东西和我的better practice。在这里我将代码分成三层:通用模块层,适配层和展示层。在通用模块的基础...

-鹏
2016/11/22
17
0
Gradle Build Tool(二)Gradle文件结构

学习Gradle其实就是学习如何使用Gradle构建我们所需要的项目。 创建一个构建 创建一个gradle构建很简单,只需要在你想要构建项目的文件中输入如下命令: 执行命令后,gradle会在当前文件夹中...

吴七禁
2018/11/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

精读《论语》读后感作文3600字

精读《论语》读后感作文3600字: 学而篇第一:子曰:“学而时习之,不亦说乎?有朋友自远方来,不亦悦乎?人不知,而不愠,不亦君子乎? 朱熹解:即学而又时时习之,则学者熟,而衷心喜悦,其...

原创小博客
27分钟前
0
0
CPU内存结构

开局一张图 由于CPU频率太快了,为解决直接读取内存的数据上的延迟,在CPU和内存之间,存在3级缓存。 CPU在解决和缓存不一致上采用两种方式: 缓存一致性协议 总线锁机制 CPU CPU的一个时钟周...

春哥大魔王的博客
30分钟前
1
0
记一次centos 7内核升级事故

情景 公司做等保3测评,在进行系统漏洞检测时发现内核存在漏洞,需要进行升级。 名称 版本 升级前内核 CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core) 升级后内核 CentOS Linux (3.10.0-957...

阿dai
56分钟前
8
0
PowerDesigner操作

1.去掉生成DDL里的注释 Database -> Edit Current DBMS -> Script -> Syntax -> BlockComment,去掉BlockComment里面的value内容。...

了凡川
今天
3
0
Django集成Markdown编辑器【附源码】

专注内容写作的你一定不要错过markdown 简单介绍 markdown是一种标记语言,通过简单的标记语法可以使普通的文本内容具有一定的格式,使用非常简单,学习成本极低 目前各大Blog平台都已支持m...

运维咖啡吧
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部