在Java中的数据库中基于布尔值执行方法的好设计是什么?

omk*_*rra 13 java design-patterns if-statement switch-statement spring-aop

我们几乎没有规则,它们在Java中作为方法实现.但有时我们需要绕过规则.因此,对于每个规则,我们都有一个布尔指示符来指示是否执行.将方法映射到Database中的布尔值并基于布尔值执行方法可能是一个很好的设计.

下面是示例模板

1 Rule1 true
2 Rule2 false
3 Rule3 true
4 Rule4 true
Run Code Online (Sandbox Code Playgroud)

所以,现在我需要分别执行method1(),method3()和method4().

一种简单的方法是使用If(rulee == true)executeMethod();

其次是使用Switch来执行案例(方法调用)

注意:我们可能需要在不同的位置(方法)执行方法.所以请不要考虑从单一方法调用所有方法.

我有机会可以使用AOP吗?

Kar*_*cki 12

您可以将基本界面定义为

public interface Rule {
  boolean canExecute();
  void execute();
}
Run Code Online (Sandbox Code Playgroud)

并将方法转换为Rule接口实现.数据库中的布尔值将映射到canExecute()返回值.

如果方法变得复杂,这将是一个好主意,它们不止一些,而且父类开始看起来像神对象.


小智 6

使用Java 8 Stream api和Enums.

public class Main {

    public enum Rule {
        RULE1 {
            @Override
            public void doWork() {

            }
        },
        RULE2 {
            @Override
            public void doWork() {

            }
        };

        public abstract void doWork();
    }

    public static void main(String[] args) {
        List<String> rules = new ArrayList<>();
        rules.stream()
                .map(Rule::valueOf)
                .forEach(Rule::doWork);
    }

}
Run Code Online (Sandbox Code Playgroud)