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

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

阅读更多

说到分层,做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  

相关推荐

    软件系统毕业设计答辩1PPT课件.ppt

    数据库设计是系统实现的基础,关系数据库设计需要考虑数据的完整性、数据的一致性和数据的安全性等问题。 六、数据库实现 为了查询方便,在实现时保留了部分冗余数据,学生信息表实现如下所示。数据库实现需要考虑...

    数据库设计课程pj,使用jsp+servlet实现一个医院信息管理系统.zip

    数据库设计是系统的核心部分,我们需要考虑如何有效地存储和管理医院的各种信息,如病人信息、医生信息、预约挂号、药品库存等。这涉及到数据库的关系模型设计,包括实体、属性、键的设计,以及表之间的关系。通常会...

    2019年软件开发程序员年终总结范文.doc

    2019年对我而言,不仅是一个新的年份的开始,也是我软件开发职业生涯中一段重要的转折点。回顾过去一年,技术的精进、项目的...我相信,这些积累都是我未来职业道路上的坚实基石,将引导我在软件开发的征程中继续前行。

    2009下半年系统架构设计师上午试题分析与解答

    - **分层架构**:将系统划分为多个层次,每一层负责不同的功能,如表示层、业务逻辑层和数据访问层。 - **微服务架构**:通过将应用程序分解成一组小的服务来实现,每个服务都运行在其独立的进程中,并且可以独立...

    信息系统项目管理师考试复习笔记

    ### 信息系统项目管理师考试复习知识点 #### 第1章 信息系统基础 - **1.1 信息的定义:** - 信息是经过处理的数据,它...以上内容覆盖了信息系统项目管理师考试的重要知识点,希望对准备参加考试的各位有所帮助。

    简单的asp.net三层例子供大家学习有什么不对的指出来谢谢各位

    这种分层设计旨在将用户界面、业务规则和数据存储分离,每个层都有其特定的职责。 1. 表现层:这是用户与应用程序交互的接口,通常由ASP.NET Web Forms、MVC或Blazor等技术实现。在本例中,可能包含了.aspx页面或者...

    银行经理竞聘演讲稿范文五篇.doc

    在营销策略上,我将强化分层营销和目标营销,制定明确的阶段性目标,不断拓展我们的优质客户群,以增加业务的增长点。此外,通过实施亲情化的服务,我会努力提升客户的满意度,从而促进业务的持续增长。 个人素质...

    结合领域驱动设计的SOA分布式软件架构

    本文主要是参考MartionFowler所著的《企业应用架构模式》与EricEvans所著的《领域驱动设计》这两本泰山之作,加上本人在近年实际的工作过程中开发SOA系统所认识到的问题所写的一篇文章,欢迎各位点评。最后两节细说...

    ASP三层模式实践源码

    根据个人.net项目开发经验,照搬了Web表示层、 BLL业务层、 SQLDAL 数据处理层,做了这样简单的新闻小系统,已经完成添加新闻、显示新闻列表、修改新闻、删除新闻、浏览新闻内容这些基本功能。希望各位朋友指教,...

    ASP三层模式实践源码(V1.1已经更新)

    根据个人.net项目开发经验,照搬了Web表示层、 BLL业务层、 SQLDAL 数据处理层, 做了这样简单的新闻小系统,已经完成添加新闻、显示新闻列表、修改新闻、删除新闻、 浏览新闻内容这些基本功能。希望各位朋友...

    ASP三层模式实践源码(未完待续)

    根据个人.net项目开发经验,照搬了Web表示层、 BLL业务层、 SQLDAL 数据处理层,目前只完成的新闻添加功能及相关代码,其它的如列表查询,修改删除还没有做。现在贴出来希望各位朋友指教,如何在ASP项目上也较好的...

Global site tag (gtag.js) - Google Analytics