`
cuisuqiang
  • 浏览: 3937730 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
3feb66c0-2fb6-35ff-968a-5f5ec10ada43
Java研发技术指南
浏览量:3651947
社区版块
存档分类
最新评论

各位开发过的业务系统都是怎么分层的

阅读更多

说到分层,做java都会想到MVC,这算是整体开发的一种模式,那么不知道各位后台业务处理时是怎么分层的呢?

 

说说MVC,MVC是三个单词的缩写,分别为: 模型(Model),视图(View)和控制Controller)。 MVC模式的目的就是实现Web系统的职能分工。 Model层实现系统中的业务逻辑,通常可以用JavaBean或EJB来实现。 View层用于与用户的交互,通常用JSP来实现。 Controller层是Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。

 

如果按照理论和学习到的来说,后台的处理要再进行合理的分层,就拿Spring+Struts+Hibernate来说,一般Struts的Action来一层,Hibernate的数据库处理来一层,而Action和Dao中间一般再来一层,成为Service层。如果需要,可能还需要再分一层,不过我还没见过。

 

我做过几个系统了,发现做业务应用的系统一般都是基于一个开发的平台,而对于开发人员来说,一般也不会再分那么多层了,直接Action来一层,Dao来一层。

我也是就这么过来了,在今天我带的组要开发的系统时,新来的员工说要在Dao和Action中间分一层,可是我觉得没有这个必要。我们的总体业务逻辑其实不是很难,所以我觉得相对于数据库的操作,只需要两层就可以了。

需要公共方法和与网络交互的,我再建立新的包专门处理,而不会嵌套在Service中。

 

对于分层,不是很好说,业务系统讲究的是实现和可维护,我每次工作都是火急火燎要求很紧张,很少时候是有对于系统设计好了再去做的。所以我不会分那么多层,越简单越好,这样不管什么样的程序员都容易去上手。

但是简单分层有一个有点,那就是要把公共方法合理抽取,并单独建立包提供给大家使用。

 

之前做的是传统上的业务系统,现在做的涉及数据库和网络编程等多方面,不管怎么样,对于系统的分层,如何才能合理,大家还是讨论一下吧!

 

请您到ITEYE看我的原创:http://cuisuqiang.iteye.com

或支持我的个人博客,地址:http://www.javacui.com

 

分享到:
评论
9 楼 blooming 2014-06-07  
视业务复杂度吧。举报表类的应用为例,如果简单到一个sql就能搞定,没必要用service.如果要对查询结果做各种转换,最好在service层做,便于自动化的集成测试
8 楼 qincidong 2013-10-18  
controller->action->service->dao
7 楼 jerry.chen 2013-02-06  
目前都是强制性分层
6 楼 cuisuqiang 2012-05-08  
xieqiuzhi 写道
cuisuqiang 写道
xieqiuzhi 写道
项目使用的是webwork+spring+hibernate。
业务代码分为action、service、dao和model。
action——处理页面请求
service——处理业务逻辑
dao——处理数据库操作
model——javabean,数据载体。

看来你们的系统分层中也增加service这么一层!不知道你们在这层里面具体做了什么事情!

service,和dao都是要在spring的配置文件里定义bean的,service的bean会定义两个:一个是事物代理的bean,一个是为非代理的bean。
dao是纯数据库操作,没有任何其他业务代码的,像美少女一样的纯洁。

举个主从表模块的例子来说明一下我们是怎么用service的:
一个主从表模块,有一个主表A和一个从表B,原则上我们都是一个表对应一个dao和serviver的。那就有aService,aDAO,bServicer,bDAO四个类。
aDAO——指只负责A表的数据库操作
bDAO——指只负责B表的数据库操作
这个两个类是很符合单一原则的,不用多说了。

在jsp界面上同时录入主表数据和从表数据点保存,把数据提交到aAction,aAction调用aService的save方法,save方法的主要逻辑就是先调用aDAO的save方法保存A表的数据,然后调用bServicer的save方法,bServicer的save方法再调用bDAO的save方法保存B表的数据。

分成action、service,dao我觉得还是比较符合单一原则,每个模块之间也很独立,如果需要应用,那就引用非代理的serviver,保证事务不是死循环。
下面是我们的spring的bean定义
<beans>
<!-- A Beans 定义 -->
<bean id="aService" parent="baseTransactionProxy">
<property name="target"><ref local="aServiceImpl"/></property>
</bean>
<bean id="aServiceImpl" class="AService"  parent="baseService">
<property name="datePayDAO"><ref local="datePayDAO"/></property>
<property name="bService"><ref bean="bServiceImpl"/></property>
</bean>
<bean id="aDAO" class="ADAO" parent="baseDAO"/>

<!-- B Beans 定义 -->
<bean id="bService" parent="baseTransactionProxy">
<property name="target"><ref local="bServiceImpl"/></property>
</bean>
<bean id="bServiceImpl" class="BService"  parent="baseService">
<property name="bDAO"><ref local="bDAO"/></property>
</bean>
<bean id="bDAO" class="BDAO" parent="baseDAO"/>
</beans>



代理类是Spring为事务管理而抽取的公共类,不能算做一层,而且看你所说的话,你的Service层也只是做了一层转发而已, 你可以参考一下:http://cuisuqiang.iteye.com/blog/1508965
5 楼 xieqiuzhi 2012-05-08  
这是我们service里的删除方法的逻辑,所有业务逻辑都再service里写。保证action和dao的纯洁。
/**
* 删除一个支付对象
*/
public void deleteDatePay(DatePay datePay) {
// 删除支付细目
List datePayBillIds = datePayBillService.getDatePayBillsByDatePayId(datePay.getId());
datePayBillService.deleteDatePayBill(datePayBillIds);
// 删除支付附件
Collection collection = fileUploadService.getAffixFilesByRefId(datePay.getId());
fileUploadService.deleteAffixFile(collection);
// 删除支付主表
datePayDAO.deleteDatePay(datePay);
}
4 楼 xieqiuzhi 2012-05-08  
cuisuqiang 写道
xieqiuzhi 写道
项目使用的是webwork+spring+hibernate。
业务代码分为action、service、dao和model。
action——处理页面请求
service——处理业务逻辑
dao——处理数据库操作
model——javabean,数据载体。

看来你们的系统分层中也增加service这么一层!不知道你们在这层里面具体做了什么事情!

service,和dao都是要在spring的配置文件里定义bean的,service的bean会定义两个:一个是事物代理的bean,一个是为非代理的bean。
dao是纯数据库操作,没有任何其他业务代码的,像美少女一样的纯洁。

举个主从表模块的例子来说明一下我们是怎么用service的:
一个主从表模块,有一个主表A和一个从表B,原则上我们都是一个表对应一个dao和serviver的。那就有aService,aDAO,bServicer,bDAO四个类。
aDAO——指只负责A表的数据库操作
bDAO——指只负责B表的数据库操作
这个两个类是很符合单一原则的,不用多说了。

在jsp界面上同时录入主表数据和从表数据点保存,把数据提交到aAction,aAction调用aService的save方法,save方法的主要逻辑就是先调用aDAO的save方法保存A表的数据,然后调用bServicer的save方法,bServicer的save方法再调用bDAO的save方法保存B表的数据。

分成action、service,dao我觉得还是比较符合单一原则,每个模块之间也很独立,如果需要应用,那就引用非代理的serviver,保证事务不是死循环。
下面是我们的spring的bean定义
<beans>
<!-- A Beans 定义 -->
<bean id="aService" parent="baseTransactionProxy">
<property name="target"><ref local="aServiceImpl"/></property>
</bean>
<bean id="aServiceImpl" class="AService"  parent="baseService">
<property name="datePayDAO"><ref local="datePayDAO"/></property>
<property name="bService"><ref bean="bServiceImpl"/></property>
</bean>
<bean id="aDAO" class="ADAO" parent="baseDAO"/>

<!-- B Beans 定义 -->
<bean id="bService" parent="baseTransactionProxy">
<property name="target"><ref local="bServiceImpl"/></property>
</bean>
<bean id="bServiceImpl" class="BService"  parent="baseService">
<property name="bDAO"><ref local="bDAO"/></property>
</bean>
<bean id="bDAO" class="BDAO" parent="baseDAO"/>
</beans>


3 楼 cuisuqiang 2012-05-08  
xieqiuzhi 写道
项目使用的是webwork+spring+hibernate。
业务代码分为action、service、dao和model。
action——处理页面请求
service——处理业务逻辑
dao——处理数据库操作
model——javabean,数据载体。

看来你们的系统分层中也增加service这么一层!不知道你们在这层里面具体做了什么事情!
2 楼 xieqiuzhi 2012-05-08  
项目使用的是webwork+spring+hibernate。
业务代码分为action、service、dao和model。
action——处理页面请求
service——处理业务逻辑
dao——处理数据库操作
model——javabean,数据载体。
1 楼 cuisuqiang 2012-05-07  

相关推荐

    android系统原理及开发要点详解

     本书在编写过程中提炼和综合Android早期开发者的经验、中国大陆Androidin社区的开发成果,以及各位专家的经验和技术,这是本书出版的知识源泉。本书主要由Androidin社区的两名核心技术专家韩超和梁泉领衔规划和...

    C#开发的小系统 学生信息管理系统

    这个信息管理系统包含登陆界面 注册界面 以及对学生信息的操作与管理 不过自己做的还很不成熟 希望各位能够多多指点

    信息系统开发实例精粹(C#版)

    信息系统开发实例精粹包括六个系统实例,每个实例包含该系统源代码、数据库脚本、系统亮点展示、常见问题解决办法、系统移植说明等代码或文件。 六个系统实例如下: 1.学生学籍管理系统 2.工资管理系统 3.工作流引擎...

    应急部门业务系统操作流程

    应急部门业务系统操作流程-精选模板_公务员考试_资格考试/认证_教育专区。欢迎各位网友们下载体验学习。

    android系统原理及开发要点详解_韩超_梁泉 4

     第9章“Android的多媒体系统”,介绍Android的多媒体系统的核心部分,包括Android中多媒体系统的业务、结构、多媒体系统的核心框架、OpenCore系统结构和使用等内容。  第10章“Android的电话部分”,介绍Android...

    电商系统业务流程.pdf

    可供参考的流程图-电商系统业务流程,在此模版下各位按照自己的情况进行修改,设计出自己或公司所需要的流程图。

    C#开发的销售管理系统

    用2008VS 开发的一个销售管理系统,与各位网友分享下,有不足的地方请多指教!

    软件项目管理系统开发《论文》

    软件项目管理系统开发的论文 网上当的,希望可以帮到各位

    人人都是架构师+分布式系统架构落地与瓶颈突破+高清完整版

    本书并没有过多渲染系统架构的理论知识,而是切切实实站在开发一线角度,为各位读者诠释 了大型网站在架构演变过程中出现 系列技术难题时的解决方案。本书首先从分布式服务案例开始 介绍,重点为大家讲解了大规模...

    人事管理系统c#源码 分层结构 实体框架 DockPanel布局

    采用VS2010 SQL2008开发的人事管理系统,也可以管理联系人。使用了三层结构、实体框架以及DockPanel界面,并可以在没有OFFICE的情况下导入导出EXCEL表格。员工生日部分支持农历。 附加data下的数据库即可运行。...

    android系统原理及开发要点详解_韩超_梁泉 1

     第9章“Android的多媒体系统”,介绍Android的多媒体系统的核心部分,包括Android中多媒体系统的业务、结构、多媒体系统的核心框架、OpenCore系统结构和使用等内容。  第10章“Android的电话部分”,介绍Android...

    C语言开发小系统,由C编写,可完成影碟出租相关业务

    C语言编写,可完成影碟出租相关业务,附源码。希望与各位交流学习用。

    中国移动业务管理系统

    本系统采用struts+spring+hibernate架构,重在讲述三者结合在一起的应用开发,所有源程序都 有详细的注释,供入门者学生参考,未经作者允许不得用于商业用途,只能用于教学或个人学习。 程序只是整个系统中的一个...

    中国移动业务管理系统 带详细注释

    本系统采用struts+spring+hibernate架构,重在讲述三者结合在一起的应用开发,所有源程序都有详细的注释,供入门者学生参考,未经作者允许不得用于商业用途,只能用于教学或个人学习。 程序只是整个系统中的一个模块...

    系统开发小图标收集实用漂亮款式多

    是多年开发积累的一些小图标,希望对各位同仁有帮助,欢迎下载

    初级进销存系统

    为了提高各位刚起步学习开发朋友的开发水平,能对软件开发过程有个整体认识,本人写了一个简单的初级进销存系统,开放出来让大家学习。这套系统是用VB+SQL SERVER2000开发的,系统非常简单,但代码与程序的结构应该...

    软件开发人员与软件测试人员比例

    这个话题引起了各位嘉宾们的踊跃讨论,infoQ的泰稳整理了这次讨论(推荐看1楼  上周末去参加了第二届(杭州)互联网测试技术交流会,下午结束了以后有个小型的交流会,会中淘宝的郭芙在自我介绍的时候提出了一个问题,...

    永无休止的业务逻辑“漏洞”.pdf

    业务逻辑漏洞,它本身不是咱们说的网络层,系统层,代码层,它本身是跟人相关的,它称之为业务设计缺陷。接下来锅涛老师就给大家全方位讲解一下,在我们程序开发过程中,怎么去规避。除了学会如何规避,还将引发你去...

    温泉PHP授权系统,目前已完整开源.zip

    操作系统:LInux、IOS、树莓派、安卓开发、微机操作系统、网络操作系统、分布式操作系统等。此外,还有嵌入式操作系统、智能操作系统等。 网络与通信:数据传输、信号处理、网络协议、网络与通信硬件、网络安全网络...

Global site tag (gtag.js) - Google Analytics