不建议把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)则它是一个持久对象,所以它是具有状态,即使按上面程序的逻辑并没有调用保存用户的方法,
但它的相关属性也会被更改.
原国很简单就是你对一个持久的对象(具有状态)进行了操作,所以一定要小心使用!
本文探讨了在软件开发中,持久对象(PO)与视图对象(VO)的合理分离使用方法。通过具体示例指出,直接更新PO可能会无意间修改数据库中的数据,强调应避免将PO直接用于表现层,而应当采用VO来隔离业务逻辑与表示层。
1万+

被折叠的 条评论
为什么被折叠?



