Je souhaite implémenter le modèle de conception d'état dans JPA. La façon dont je fais actuellement ceci est décrite dans ce blog post.Comment implémenter le modèle de conception d'état dans un modèle de domaine JPA
L'auteur utilise une énumération contenant toutes les implémentations d'état disponibles au lieu de créer une classe/interface abstraite pour l'abstraction d'état et l'implémentation de l'écriture pour chaque état. Je trouve cette approche très utile, car les enums peuvent être facilement sérialisés en JPA et vous pouvez stocker l'état actuel de votre objet sans effort supplémentaire. J'ai également imbriqué l'interface d'état et toutes les classes d'état dans l'énumération, ce qui les rend privées, car elles sont spécifiques à l'implémentation et ne devraient être visibles par aucun client. Voici un exemple de code de l'ENUM:
public enum State {
STATE_A(new StateA()),
STATE_B(new StateB());
private final StateTransition state;
private State(StateTransition state) {
this.state = state;
}
void transitionA(Context ctx) {
state.transitionA(ctx);
}
void transitionB(Context ctx) {
state.transitionB(ctx);
}
private interface StateTransition {
void transitionA(Context ctx);
void transitionB(Context ctx);
}
private static class StateA implements StateTransition {
@Override
public void transitionA(Context ctx) {
// do something
ctx.setState(STATE_B);
}
@Override
public void transitionB(Context ctx) {
// do something
ctx.setState(STATE_A);
}
}
private static class StateB implements StateTransition {
@Override
public void transitionA(Context ctx) {
throw new IllegalStateException("transition not allowed");
}
@Override
public void transitionB(Context ctx) {
// do something
ctx.setState(STATE_A);
}
}
}
Je voudrais partager avec vous et obtenir vos pensées sur elle. Trouvez-vous cela utile? Comment implémenteriez-vous le modèle de conception d'état dans un modèle de domaine JPA?
Remerciez, Theo