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

我们很少有规则,这些规则在Java中作为方法实现。但有时我们需要绕过规则。因此,对于每个规则,我们都有一个布尔指标来指示是否执行。将方法映射到数据库中的布尔值并基于布尔值执行方法可能是一个好的设计。

下面是示例模板

1 Rule1 true
2 Rule2 false
3 Rule3 true
4 Rule4 true

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

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

第二种是使用 Switch 来执行情况(方法调用)

注意:我们可能需要在不同的位置(方法)执行方法。因此,请不要认为所有方法都将从单个方法调用。

我可以利用AOP吗?


答案 1

您可以将基本接口定义为

public interface Rule {
  boolean canExecute();
  void execute();
}

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

如果方法变得复杂,这将是一个好主意,其中有很多,父类开始看起来像一个上帝对象


答案 2

使用 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);
    }

}