- 爱易网页
-
Java教程
- SSH架构中关于业务逻辑层的理解,还请大家指正,多谢
日期:2014-05-18 浏览次数:20742 次
SSH架构中关于业务逻辑层的理解,还请大家指正,谢谢
SSH架构中关于业务逻辑层的理解,还请大家指正,谢谢
业务逻辑:一个用烂的词.
1.什么是业务逻辑?
业务逻辑即业务规则:除掉简单的增删改查的数据访问之外,
还会涉及到一些复杂的功能流程和功能要求,称之为业务逻辑
2.举例
银行转帐:一个人余额加,一个人余额减,同时还要保证余额足够,
还有不能同一帐号互转,可能还有一天只能转多少钱的限制.
入库审核:库存增加,应付帐增加,审核标识要修改.已经审核过的不能再审核.
论坛用户注册:包括要向邮箱发送电子邮件,如果发送失败,则注册失败.
通常审核必须要有相应权限.涉及到权限问题
滞纳金的多种计算策略:
联通的手机话费的优惠策略:
凡月话费总额超过300元者,市话费可享受85折优惠;
月话费总额超过600元者,市话费可享受8折优惠。
由于市场策略变化,可能每个月的优惠策略都要发生变化
3.特点
3.1.与数据操作的关系
可能包含多次数据操作
可能同时包含数据操作与非数据操作
只有非数据操作
3.2.可维护性的要求
也有可能不会修改(如用户注册发送邮件)
但表示策略的逻辑通常会经常修改(如联通手机话费优惠).
所以有些情况不适宜用存储过程,不便于维护与重用.
4.实现业务逻辑通常碰到的几个问题
4.1.包含多次数据操作时,如何使它们处于同一session,同一事务
ThreadLocal
4.2.如何将非数据库事务与数据库事务归整到同一事务(如发送邮件失败,则用户注册失败)
JTS
4.3.通常复杂的权限控制会置于业务逻辑中
ACEGI
4.4.如何处理业务规则频繁变化?
spring的ioc
5.如何设计业务逻辑类
ssh架构中,如果是功能-表的简单对应,
可以通过元素form,action,vo,dao,action简单实现
如果引入业务逻辑,可再引入service层
按依赖规则,其中service中只使用dao与po,不得使用form与action
鉴于业务逻辑的频繁变化,则需引入接口-实现类机制,便于使用spring的ioc机制进行切换.
至于dao本身使用接口似乎多此一举.
在hibernate synchronizer中使用接口则是考虑自动生成代码与手工编码的统一问题.
6.实现举例
PO如下
public class UserPO implements 序列化接口
{
private Integer userId ;//数据库用
private String code ;//用户自定义用
private String name ;
private Double salary ;//薪水
private java.util.Date birthDate ;//出生日期
//getter and setter....
}
DAO如下
public class UserAddDAO extends BaseDAO
{
private UserPO userPO ;
public void execute()
{
//call hibernate method
}
//getter and setter....
}
vo接口
public interface IUserAddService
{
void execute() ;
}
vo实现类
public class UserAddServiceA implements IUserAddService
{
public void execute()
{
//可简单调用dao
//但以后可随时扩展,如发送电子邮件等内容
}
}
form如下
public class UserForm extends ValidatorForm
{
private String userId ;//数据库用
private String code ;//用户自定义用
private String name ;//昵称
private String salary ;//薪水
private String birthDate ;//出生日期
//getter and setter....
}
action如下
public class UserAddAction extends Action
{
//以便以后使用spring进行注入,暂时未使用
private IUserAddService userAddService ;
public ActionForward execute(MappingForm.....)
{
UserForm userForm = (UserForm)form ;
UserPO userPO = new UserPO() ;
BeanUtils.copyProperties(userVO,userForm);
userAddService = new UserAddServiceImpA() ;
userAddService.setUserPO(userPO) ;
userAddService.execute() ;
//异常与转向省略
}
}
当然加入hibernate synchronizer之后要多很多类,这里暂不表.
有错误之处,还请大家指正.也希望大家提出建议,谢谢.