[该贴被codeslave于2008-02-25 09:43修改过]
这是违反基本分层架构设计的,业务应该在业务层,Action属于控制层 ,属于界面层MVC的Controller
>jivejdon的代码没有使用Struts action
其实内部通过Jdon框架使用了,只不过不用程序员自己写action
因此,判断用户密码是否正确的逻辑应该在Sevice层做:
public UserManagementServiceImpl implements UserManagementService {
public void login(String loginName,String password) throws ServiceException {
UserDO userDO = userDAO.getUserByLoginName(loginName);
if(userDO==null)
throw new ServiceException("User doesn't exist!");
if(!userDO.getPassword().equals(encode(password)))
throw new ServiceException("Password is wrong!");
}
}
不过直到现在我都感觉,比如密码输入错误能算Exception吗?
我总感觉只能算是Service的一种return值!
可能是我理解的问题?
但如果登陆失败的多种原因需要进行分类反馈给客户,例如:
用户不存在
密码错误
用户被锁定
系统关闭
...
就不能只通过返回值来告诉客户了,这种情况,就需要用Exception类处理,而且需要抛出一种非RuntimeException,让调用者根据实际情况进行处理。
在设计系统的时候,可能一开始的需求只有“能/不能”两种情况,但以后系统的需求是有扩展的可能的,比如以后用户可以被锁定,需要告诉客户更丰富的登陆失败信息,所以,设计LogIn服务接口的时候,就需要进行充分考虑,以适应日后的变化,这样设计出来的接口,才符合OCP(开闭原则)。