Abbiamo una logica aziendale semplificata come questa:
public enum BusinessLogic {
STAGE_ONE(true, false, false),
STAGE_TWO(true, true, false),
STAGE_THREE(false, false, true);
private final Boolean canStartProcessing;
private final Boolean canDoStuff;
private final Boolean canFinish;
private BusinessLogic(Boolean canStartProcessing, Boolean canDoStuff, Boolean canFinish){
... usual simple constructor
}
... getters
}
Diciamo che è mappato al mio oggetto Business in questo modo:
public class BusinessObject {
... constructors, fields, getters, setters, etc...
private BusinessLogic logic
@Enumerated(EnumType.STRING)
@Column(name = "LOGIC")
public BusinessLogic getLogic(){...usual getter...}
public BusinessLogic setLogic(){...usual setter...}
}
Quando arriva il flusso di lavoro, ad esempio Fase 2, BusinessObject viene aggiornato e il campo LOGIC deve essere impostato su BusinessLogic.STAGE_TWO, quindi è possibile utilizzare funzioni come "avvio processo" e "fare cose", prima che non sia possibile "fai roba", anche se ha raggiunto la terza fase, non puoi fare altro, ma "finire" il processo.
Questo tipo di struttura della logica aziendale ha qualcosa a che fare con le buone pratiche? Intendo per esempio: manutenibilità, non completamente rappresentata nel Database o qualsiasi altra cosa a cui non avessi pensato?