我有这个方法签名:
public User getActiveUser(String personId, User mainUser) throws MyExceptions {
if (personId== null) return mainUser;
User innerUser = userRepository.getByPersonId(personId);
checkForNull(innerUser);
checkIsActive(innerUser);
return innerUser;
}
private void checkForNull(User innerUser) throws UNPExceptions {
if (innerUser == null) throw new MyExceptions(USER_NOT_FOUND);
}
private void checkIsActive(User innerUser) throws UNPExceptions {
if (!innerUser.getIsActive()) throw new MyExceptions(USER_BLOCKED);
}
我从不同的地方调用这个方法,如下所示:
User user = userService.getActive(userRequest.getPersonId(), requestEntity.getUser());
我不喜欢这段代码,因为:
1) 我向此方法传递 2 个参数 getActiveUser(String personId, User mainUser)
personId
为 null,mainUser
始终返回。我可以将此检查移到方法内部,但每次调用该方法之前我都必须执行此操作。并且该方法是从很多地方调用的。所以我把支票移到了一个地方。但它看起来歪了,我不知道如何绕过它。我不想传递第二个参数只是为了在方法内部执行此检查,但它看起来比在每次方法调用之前复制此检查更好。我不知道哪种解决方案更好。也许还有另一种解决方案。
2) 方法名称 - getActiveUser
撒谎。因为我在里面做了更多的检查。但我不知道如何调用它 - getActiveUserAndCheck
?这也是不正确的,因为该方法负责多项职责
3)是否有必要将检查分为单独的方法? checkForNull(innerUser);
checkIsActive(innerUser);
最佳答案
如果 mainUser 始终是同一用户,则不必将其作为方法参数传递,您可以将其存储为实例字段并在适当时初始化它。
如果不是这种情况,您可以使用 AOP 来处理 personId 为 null 的情况,并且切面组件将负责检索 mainUser。
关于java - 重构方法时要选择什么方法,才能符合整洁代码的原则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53669632/