SSH架构中关于业务逻辑层的理解,还请大家指正,谢谢

employeevsboss 2007-05-31 03:25:35
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之后要多很多类,这里暂不表.
有错误之处,还请大家指正.也希望大家提出建议,谢谢.
...全文
842 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangx1949 2007-05-31
  • 打赏
  • 举报
回复
不错,学习了
suncheng_hong 2007-05-31
  • 打赏
  • 举报
回复
userAddService = new UserAddServiceImpA() ;
你的业务层没有注入到action中.
private IUserAddService userAddService ;没有set方法.
rickhunterchen 2007-05-31
  • 打赏
  • 举报
回复
userAddService = new UserAddServiceImpA() ;
userAddService.setUserPO(userPO) ;
userAddService.execute() ;
===============================
spring的ioc很简单的理解就是在你的方法里不再有new。
你在action中还new service层的类。
难道你真的用到了spring?
suncheng_hong 2007-05-31
  • 打赏
  • 举报
回复
你的spring配置文件是如何加载的?

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧