Patrón de estado de Java con diferentes propiedades y SQL.
Tengo una clase de dominio principal llamada Broadcast que puede tener tres estados:
public class Broadcast {
private Long id;
private String title;
private Author author;
private State state;
// constructor, getters and setters
}
Cada estado contiene diferentes propiedades.
public abstract class State {
private Broadcast stateContext;
public State(Broadcast stateContext) {
this.stateContext = stateContext;
}
}
public class UpcomingState extends State {
private OffsetDateTime createdAt;
private OffsetDateTime scheduledAt;
public UpcomingState(Broadcast stateContext) {
super(stateContext);
}
// getters and setters
}
public class LiveState extends State {
private OffsetDateTime startedAt;
public LiveState(Broadcast stateContext) {
super(stateContext);
}
// getters and setters
}
public class EndedState extends State {
private OffsetDateTime startedAt;
private OffsetDateTime endedAt;
public EndedState(Broadcast stateContext) {
super(stateContext);
}
// getters and setters
}
¿Cómo diseño las tablas en la base de datos para almacenar objetos de esta clase (por ejemplo, postgresql) y todavía preservar la información sobre las transiciones de estado, asumiendo que algunos estados podrían aplicarse varias veces?
Por ejemplo, próximo -> en vivo (primeros datos) -> en vivo (segundos datos) -> terminado.
davy.ai
Para almacenar objetos de la clase Broadcast en una base de datos PostgreSQL sin perder información acerca de las transiciones de estado, podemos diseñar las siguientes tablas:
Para realizar el seguimiento de las transiciones de estado, podemos crear una tabla state_transitions con las siguientes columnas:
De esta manera, cada vez que cambie el estado del objeto broadcast, podemos insertar una nueva fila en la tabla state_transitions con el nuevo estado y el momento en que se produjo. De esta manera, podemos realizar el seguimiento de las transiciones de estado aunque un estado se aplique varias veces.