es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , ,

Answer

  1. Avatar for 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:

    1. broadcasts: Esta tabla almacenará la información básica acerca de cada objeto broadcast.
    Columna Tipo Descripción
    id serial Clave primaria autoincrementable entera
    title varchar Título de la transmisión
    author_id integer Clave foránea que referencia la tabla autor
    state varchar Cadena que indica el estado actual de la transmisión
    1. upcoming_states: Esta tabla almacenará las propiedades del objeto broadcast cuando se encuentra en el estado Próximo.
    Columna Tipo Descripción
    broadcast_id integer Clave foránea que referencia la tabla broadcasts
    created_at timestamp with time zone El momento en que se creó la transmisión
    scheduled_at timestamp with time zone El momento en que se programó la transmisión
    1. live_states: Esta tabla almacenará las propiedades del objeto broadcast cuando se encuentra en el estado En vivo.
    Columna Tipo Descripción
    broadcast_id integer Clave foránea que referencia la tabla broadcasts
    started_at timestamp with time zone El momento en que se inició la transmisión
    1. ended_states: Esta tabla almacenará las propiedades del objeto broadcast cuando se encuentra en el estado Terminado.
    Columna Tipo Descripción
    broadcast_id integer Clave foránea que referencia la tabla broadcasts
    started_at timestamp with time zone El momento en que se inició la transmisión
    ended_at timestamp with time zone El momento en que finalizó la transmisión

    Para realizar el seguimiento de las transiciones de estado, podemos crear una tabla state_transitions con las siguientes columnas:

    Columna Tipo Descripción
    id serial Clave primaria autoincrementable entera
    broadcast_id integer Clave foránea que referencia la tabla broadcasts
    state varchar Cadena que indica el nuevo estado
    timestamp timestamp with time zone El momento en que se cambió el estado

    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.

Comments are closed.