论坛首页 Java企业应用论坛

关于应用层次设计的讨论

浏览 17897 次
精华帖 (0) :: 良好帖 (4) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-04-11  
zhongmin2012 写道
我们目前使用的第二种方式的涉及,项目一直沿用,确实使用起来很爽,而且封装了service,service封装了dao,这样访问service就能直接访dao了,而且service都抽到了baseservice,使用spring管理


Service是干啥的?
0 请登录后投票
   发表时间:2012-04-11  
ericchi 写道
结构2中,抽象业务逻辑类依赖于IDAO的实现,所有的业务逻辑类都继承了抽象业务逻辑类。
我个人认为:
该结构的优点是简化开发过程,不用针对每一个业务逻辑创建独立的DAO实现,仅此而已。
它的缺点是:
1、SQL语句或HQL语句,将出现在具体的业务逻辑类中。造成了业务逻辑类的臃肿。
2、不利于复用DAO层逻辑。
3、不灵活。举个例子,BusAManager和BusBManager都通过IDAO实现访问关系数据库,某一天由于业务需要,BusAManager依然访问关系数据库,而BusBManager需要访问文件数据库。这个时候要扩展起来,就很麻烦。


结构2,怎么会有SQL出现在业务逻辑类中呢?可能是你理解错了,SQL只能放到它引用的DAO中。

关于这个问题,建议去看看《企业应用架构模式》这本书。我的理解是这两个结构是典型的mvc模式中去掉V,而简化的。我们现在也是用这种模式,web作为一个单独的应用,业务逻辑防止app层,通过hession来通信。对于app层,只有service层和dao层了

我觉得这两种结构都不合理:
1结构会导致过多的interface;
2结构会导致一个类中有过多的方法。

我觉得应该结合这2个结构,原则是把业务相关的逻辑一组放在同一个接口中。其实不要生搬硬套,理解其原理即可,我在实际中会把设计映射到现实模型中,比如现实中有很多业务对象,我就有多少个类,并且通过这些业务对象来协作某个大的事务,那么将这个事务作为某个interface的方法对外公布。
0 请登录后投票
   发表时间:2012-04-11  
jiuyuehe 写道
1做点小应用,结构层次鲜明。容易维护修改。

也就是说,性能、吞吐量、可扩展、可维护、可伸缩、安全等一系列的非功能性需求。

对于结构1来说,每个service的Dao都是独立的。在结构上,它可扩展和可维护性会比结构2的强。

因此,大型项目更适合于选择结构1。

结构2,层次划分不清晰,耦合度比较高。一旦涉及到变化,他的抽象模式就要被打破,必然也带来了一系列的不可预估的麻烦。




我想说,关于可扩展、可维护这两点,在应用架构分层上只起到非常小的效果,要想得到更大的效果需充分应用OOD\OOA对业务模型的建模。

仅仅要求开发人员定义几个service和dao是做不到的可扩展和可维护的,我们项目组的开发人员也是会用service和dao,完全跟OO设计不搭边,维护和扩展真痛苦。


0 请登录后投票
   发表时间:2012-04-11  
devroller2 写道
ericchi 写道
结构2中,抽象业务逻辑类依赖于IDAO的实现,所有的业务逻辑类都继承了抽象业务逻辑类。
我个人认为:
该结构的优点是简化开发过程,不用针对每一个业务逻辑创建独立的DAO实现,仅此而已。
它的缺点是:
1、SQL语句或HQL语句,将出现在具体的业务逻辑类中。造成了业务逻辑类的臃肿。
2、不利于复用DAO层逻辑。
3、不灵活。举个例子,BusAManager和BusBManager都通过IDAO实现访问关系数据库,某一天由于业务需要,BusAManager依然访问关系数据库,而BusBManager需要访问文件数据库。这个时候要扩展起来,就很麻烦。


结构2,怎么会有SQL出现在业务逻辑类中呢?可能是你理解错了,SQL只能放到它引用的DAO中。

关于这个问题,建议去看看《企业应用架构模式》这本书。我的理解是这两个结构是典型的mvc模式中去掉V,而简化的。我们现在也是用这种模式,web作为一个单独的应用,业务逻辑防止app层,通过hession来通信。对于app层,只有service层和dao层了

我觉得这两种结构都不合理:
1结构会导致过多的interface;
2结构会导致一个类中有过多的方法。

我觉得应该结合这2个结构,原则是把业务相关的逻辑一组放在同一个接口中。其实不要生搬硬套,理解其原理即可,我在实际中会把设计映射到现实模型中,比如现实中有很多业务对象,我就有多少个类,并且通过这些业务对象来协作某个大的事务,那么将这个事务作为某个interface的方法对外公布。



您好,
在业务逻辑层确实会出现SQL,因为AbstractBaseService依赖于IDao的实现,而BaseDao作为IDao的实现,只提供了通用的增删改查方法。
因此,业务逻辑层实现具体的业务操作时,必须传入业务对应的SQL。

另,对于Dao层而言,一个Dao层对应一个实体表(关系数据库或FDS库)的操作是必要的。因为,在大型项目中,随着业务增长,你的存储方式可能会产生变化,因此改变对应的某一个DAO就能够适应这样的变化。

再,我赞成您的另一个观点:把设计映射到现实模型中。

您现在所用的模式。web容器是独立的,app作为单独的应用,独立的提供服务。这样的思想有点服务化的意思。但我不建议将全部的app层都服务化。服务化的前提是这个服务的可复用度有多重,否则会增加额外的通讯开销,而无实际用处。另,服务化的粒度划分也比较重要。在SOA思想中,提倡组件化,一个组件就是一个服务,外部不知道组件内部的实现,只了解接口,保持知识最小化原则。我想也是这样的意思。

谢谢您推荐的图书!
0 请登录后投票
   发表时间:2012-04-11  
ericchi 写道
jiuyuehe 写道
1做点小应用,结构层次鲜明。容易维护修改。

也就是说,性能、吞吐量、可扩展、可维护、可伸缩、安全等一系列的非功能性需求。

对于结构1来说,每个service的Dao都是独立的。在结构上,它可扩展和可维护性会比结构2的强。

因此,大型项目更适合于选择结构1。

结构2,层次划分不清晰,耦合度比较高。一旦涉及到变化,他的抽象模式就要被打破,必然也带来了一系列的不可预估的麻烦。




我想说,关于可扩展、可维护这两点,在应用架构分层上只起到非常小的效果,要想得到更大的效果需充分应用OOD\OOA对业务模型的建模。

仅仅要求开发人员定义几个service和dao是做不到的可扩展和可维护的,我们项目组的开发人员也是会用service和dao,完全跟OO设计不搭边,维护和扩展真痛苦。





赞同业务建模,非常必要。
架构设计也是根据业务建模以及对应标准产生的。
产品架构也是在发展过程中,不断完善的。
0 请登录后投票
   发表时间:2012-04-11  
第二种方法好,第一种分层n多DAO,啰嗦折腾,完全没有必要,我采用的是第二种分层。
0 请登录后投票
   发表时间:2012-04-11  
第二种就是一个baseservice和一个basedao来进行通用的增删改查,其他和第一种没什么区别,而且在我看来两种都没什么本质区别。求讲解。
0 请登录后投票
   发表时间:2012-04-11  
JackyCheng2007 写道
大家都没有考虑过不用DAO,直接用service。spring和hibernate的合作使得很多service里面直接调用DAO的方法,很是麻烦。

目前我就是这么搞的,还没发现啥不方便的地方!!!
0 请登录后投票
   发表时间:2012-04-11  
ltian 写道
zhongmin2012 写道
我们目前使用的第二种方式的涉及,项目一直沿用,确实使用起来很爽,而且封装了service,service封装了dao,这样访问service就能直接访dao了,而且service都抽到了baseservice,使用spring管理


Service是干啥的?

业务逻辑层,说得急了点,可能说的不清楚,呵呵
0 请登录后投票
   发表时间:2012-04-11  
神马分层、神马层次。

我就想到了机构臃肿的国.企政.府。

这大概就是技术中毒吧,个人认为相当多的情况下本来不需要那么多的分层的。但是一代代的后继者都追随着这种技术。项目中一个Dao层几十上百个类,一个Service层几十上百个类,大多数情况那些类都是空的,仅仅是为了将来可能出现的代码变动。再联想到Struts2那臃肿的配置,Hibernate那臃肿的配置。。。不知所云了,大家忽视我吧
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics