不建议把po直接应用于表现层,强烈建议把po和vo分开使用

本文探讨了在软件开发中,持久对象(PO)与视图对象(VO)的合理分离使用方法。通过具体示例指出,直接更新PO可能会无意间修改数据库中的数据,强调应避免将PO直接用于表现层,而应当采用VO来隔离业务逻辑与表示层。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不建议把po直接应用于表现层,强烈建议把po和vo分开使用

UserAction.java
/** 保存 */
public ActionForward save(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response) { 

 
 UserPo usrPo=userService.getUserByUserId(userId);
 
 LazyValidatorForm stationForm = (LazyValidatorForm)form;

 /** ====================(1)====================  */
 userPo.setAccount=(String)form.get("account");
 userPo.setUserName=(String)form.get("userName");  
 userPo.setSex=(String)form.get("sex");
 userPo.setPassword=(String)form.get("password");
 userPo.setTel=(String)form.get("tel");

 /** 判断用户帐号是否已存在  */
 if(isExsit(userPo.getAccount())){
  /** 存在则不保存 */
 }else{
  /** 不存在保存 */
  userService.saveUser(userPo);
 }
}

请注意上面的代码是否会出现问题呢?
我们来分析一下:
当用户帐号存在时按程序的逻辑是不会保存你所更改的内容的,但是因为(1)处已先将po的相关属性值set成了最新表单form中的内容了
,此时的po是调用服务getUserByUserId(userId)则它是一个持久对象,所以它是具有状态,即使按上面程序的逻辑并没有调用保存用户的方法,
但它的相关属性也会被更改.

原国很简单就是你对一个持久的对象(具有状态)进行了操作,所以一定要小心使用!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值