java - 重构方法时要选择什么方法,才能符合整洁代码的原则?

标签 java methods refactoring parameter-passing clean-architecture

我有这个方法签名:

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/

相关文章:

java - 如果我在 JFrame 内的任何地方按 escape(不仅仅是在特定的文本框等;),如何关闭 JFrame ?

java - Spring Boot 执行器管理端点异常处理

java - 查找文件保存的正确参数

ruby - "first"辅助方法

xml - 重构 XSD 架构

java - 无法在 servlet init 方法中构建 session 工厂

php - 在 Woocommerce 3 上的订单中更新并保存订单商品

c# - 调用方法如何并行运行

java - JPA 引用重构

ruby-on-rails - Rails 将 Controller 逻辑移动到模型中