首页 新闻 搜索 专区 学院

Service层中这样throws Exception合适吗

0
悬赏园豆:50 [已解决问题] 解决于 2016-06-08 16:07
 1 public User login(String username, String password) throws UserNotExistException, PasswordException {
 2         User user = userDao.findUserByUserName(username);
 3         if (user == null) {
 4             LOGGER.debug("登录用户不存在:{}", username);
 5             throw new UserNotExistException(username);
 6         }
 7         if (!user.getPwd().equals(password)) {
 8             LOGGER.debug("登录密码错误:{}", username);
 9             throw new PasswordException(username);
10         }
11         LoginLog log = new LoginLog();
12         log.setUserid(user.getId());
13         log.setLoginTime(new Date());
14         loginLogDao.add(log);
15         LOGGER.info("登录成功:{}", username);
16         return user;
17     }
♂蔚蓝天空☆的主页 ♂蔚蓝天空☆ | 初学一级 | 园豆:157
提问于:2016-06-08 10:13
< >
分享
最佳答案
0

合适,不过password是存的明文么。

收获园豆:46
长蘑菇星人 | 小虾三级 |园豆:1832 | 2016-06-08 10:19

这个可能不是关注的点,主要问题是想了解这种处理业务的方式是否合理?因为一般都是Service提供matchUser,loginSuccess来处理的登录业务。

♂蔚蓝天空☆ | 园豆:157 (初学一级) | 2016-06-08 10:40

@♂蔚蓝天空☆: 合适,在Service中,不合理的输入将不会得到正确的结果。通知调用者的方式就是异常。

长蘑菇星人 | 园豆:1832 (小虾三级) | 2016-06-08 10:48
其他回答(3)
0

你这个方法是判断用户是否登录成功的话,肯定只能返回一个布尔类型,你返回个user作甚?

收获园豆:1
加洲旅馆2012 | 园豆:503 (小虾三级) | 2016-06-08 10:23

其实是一次登录操作,不是判断用户是否登录成功,所以不知道这样写否合适。不返回User的话怎么去获取用户信息呢?

支持(0) 反对(0) ♂蔚蓝天空☆ | 园豆:157 (初学一级) | 2016-06-08 10:35
0

throw exception 个人觉得是正常的一种中断业务逻辑的方式

收获园豆:2
czd890 | 园豆:12618 (专家六级) | 2016-06-08 10:26

那比如现在想增加功能:在登录的时候记录登录IP,这时怎么处理?

支持(0) 反对(0) ♂蔚蓝天空☆ | 园豆:157 (初学一级) | 2016-06-08 10:43

@♂蔚蓝天空☆: 你需要AOP或者提供一个事件,前者通过拦截登录方法,后者提供一个观察者。

支持(1) 反对(0) 长蘑菇星人 | 园豆:1832 (小虾三级) | 2016-06-08 10:45

@长蘑菇星人: 嗯......赞!感觉说得非常在理,那是否LoginLog完全可以不在login里处理啦?

支持(0) 反对(0) ♂蔚蓝天空☆ | 园豆:157 (初学一级) | 2016-06-08 11:02

@♂蔚蓝天空☆: 没错。无关紧要的东西不要和业务掺杂在一起。

支持(0) 反对(0) 长蘑菇星人 | 园豆:1832 (小虾三级) | 2016-06-08 11:04

@长蘑菇星人: 棒棒的!一下感觉上面的login有点过程化了。去除了LoginLog更能体现“单一职责”。

支持(0) 反对(0) ♂蔚蓝天空☆ | 园豆:157 (初学一级) | 2016-06-08 11:11
0

很正常的

收获园豆:1
laugher_ccc | 园豆:593 (小虾三级) | 2016-06-08 10:40
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册