mercredi 10 juin 2020

spring and different way to avoid to use new

I use spring boot 2.

I need to validate many condition, instead of creating many if, I create a class for every condition who implements isValid method.

public interface Rulecondition<T>{
  boolean isValid(){
}

public class ClientGroup implements Rulecondition<Billing>{
  private Billing billing;

  public ClientGroup(Billing billing){
    this.billing=billing;
  }

  @Override
  public boolean isValid(){
    return true; //only for example...
  }

}

I create a class who use a stream of all condition and verify if everything is valid

@Component
public class ConditionRuleEngine{
  private List<Rulecondition> rules = new ArrayList<>();

  public ConditionRuleEngine(){

  }


  public void addRule(Rulecondition rule){
    rules.add(rule);
  }

  public boolean conditionApply(){
    retunr rules.stream().allMatch(r->.isValid()));
  }

}

In a service class, I autowired ConditionRuleEngine

@Service
public class OperationService(){

  private final ConditionRuleEngine conditionRuleEngine;

  @Autowired
  public OperationService OperationService(final ConditionRuleEngine conditionRuleEngine){
    this.conditionRuleEngine=conditionRuleEngine;
  }

  public void execute(Billing billing){

      //need to add condition

      conditionRuleEngine.run(); 
  }

}

Is there any better way to add condition then creating a new?

ClientGroup cg = new ClientGroup(billing);
conditionRuleEngine.add(cg);

Aucun commentaire:

Enregistrer un commentaire