Sto per implementare la mia prima macchina a stati e mi rimane una domanda, che è il modulo di codifica accettabile su chi dovrebbe cambiare lo stato dell'oggetto / entità? La StateMachine dovrebbe cambiare lo stato? L'oggetto stesso dovrebbe cambiare il proprio stato? Se un sevice (ad esempio IncidentTicketService) modifica lo stato dell'entità (IncidentTicket)?
Esempio concreto
public enum IncidentState {
OPEN, CLOSED, CANCELLED, PENDING
}
...
public class IncidentTicket {
private String state;
}
...
public IncidentTicketStateMachine {
// code here depends if this object is doing the state change, or
// just indicating which are the next/previous states based on the
// provided object in a constructor... I guess.
}
...
# only if this is common practice to change the state of the object
public class IncidentService {
private IncidentTicket incidentTicket;
public IncidentService(IncidentTicket incidentTicket) {
this.incidentTicket = incidentTicket;
}
public void nextState() {
this.incidentTicket.setStatus(....);
}
...
Non mi interessa codificarlo in entrambi i modi (oggetto cambia stato vs macchina di stato), sto chiedendo poiché voglio scoprire quale dei due è più comune?
Grazie