论坛首页 入门技术论坛

(讨论)Java EE的Service的设计模式,大家讨论一下

浏览 2174 次
该帖已经被评为新手帖
作者 正文
   发表时间:2007-10-17  
有以下情况:
在创建(create)记录时,需要保存(save)到本地数据库中,同时需要通过JMS发送给JMS的接收方。使用何种模式!

个人认为:
save to local
save to jms
是二种服务,应当定义二种service,在Action中分别调用。

而我们DM(Department Manager)坚持认为,应当在一个service中实现。即在service的save()方法中,不仅保存到本地,同时JMS发送。

个人认为DM的方法不符合软件设计的模式,serivce是提供给外部使用的接口,功能应当单一,对于组合的功能,应当通过在action中调用或者是通过切面设计的原则来实现。
现在在进行权限检查或者日志记录等方面时,大部分的设计都是通过对于service进行拦截的方式来实现。(偶DM不是通过这种方法实现,而是通过在Struts的execute()方法中调用来实现。DM原来是做ASP,DOMINO开发的)。

大家热情讨论一下。
谢谢!
   发表时间:2007-10-17  
说真的,我不认为这是个问题,一开始不妨听从DM的意见,写在一个service里,如果通过JMS发送这个功能在很多地方用到,那么通过extract method、move重构一下也是举手之劳。
0 请登录后投票
   发表时间:2007-10-17  
考虑事务性,你dm的做法不无道理
0 请登录后投票
   发表时间:2007-10-17  
DM应该是有预见性的认为, 大部分业务操作都是要保存到本地,同时JMS发送.
这可以说是一种粒度适当的操作.

但是, 程序编码时, 是否易于扩展, 就要看楼主的了!
0 请登录后投票
   发表时间:2007-10-18  
Re dennis_zane、hamlet、galaxystar:

不知道大家看明白没有,还是偶没有表述清楚,偶的意思是二种业务,应当提供二个Service来实现,至于通过JMS发送,完全可以通过aspectJ或者spring的拦截来实现。

这种jms的业务应当是易于配置。
0 请登录后投票
   发表时间:2007-10-18  
这种应用场景我觉得应该使用粗粒度的Service,调用者不需要去关心你是保存到Local,还是JMS还是其他。
0 请登录后投票
   发表时间:2007-10-18  
Re 惊鸿逝水 :
大家可能还是没有明白偶的意思,偶的意思是分成二个Service,可以通过配置的方式,或者说是加载aspectJ拦截的方式来实现,就像是大家记录日志,总不会说在service都加上吧。
0 请登录后投票
论坛首页 入门技术版

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