Sono d'accordo con il commento di @ FrankHileman sulla terminologia dei messaggi come stato confuso e uso non standard del concetto di messaggi.
I messaggi, quasi per definizione, sono immutabili e passano tra due o più di una sorta di entità (mutabile), come gli attori.
Sarebbero gli attori che seguono le macchine di stato, dati i messaggi, per determinare cosa fare dopo. Ogni attore può avere la propria (diversa) macchina statale. Il numero di attori ha a che fare con il tuo dominio.
Anche se a volte potremmo essere in grado di modellare tutti gli stati di tutti gli attori in un modello non è necessario farlo, e sarebbe probabilmente più semplice avere macchine a stati indipendenti associate a attori diversi.
Suggerirei di associare a ciascun attore solo gli stati e la macchina a stati di cui ciascuno a sua volta ha bisogno, piuttosto che disporre di un oggetto StateMachine globale.
In generale è meglio distribuire le responsabilità tra le parti responsabili (cioè gli attori) piuttosto che raccogliere un aspetto o una preoccupazione trasversale di tutte le responsabilità (ad esempio la macchina degli stati / stato) in un unico luogo / entità globale. Questo tende a ridurre l'accoppiamento supportando Principio di Responsabilità Unica (SRP) ; vogliamo che le entità di dominio abbiano una responsabilità di dominio.
Mentre la centralizzazione tende ad aumentare l'accoppiamento, rendendo più difficile apportare modifiche indipendenti, l'indipendenza è l'obiettivo principale a sostegno della manutenzione a lungo termine.
Questo non vuol dire che la centralizzazione delle preoccupazioni trasversali non abbia alcuni vantaggi, ma si traduca in un costo di manutenzione e talvolta aumenta anche altre complessità introducendo un'entità aggiuntiva orientata all'implementazione piuttosto che orientata al dominio.
L'introduzione di un'entità separata con responsabilità centralizzata per una preoccupazione funzionale che attraversa diversi attori supporta SRP in un senso molto indiretto; tuttavia, dovremmo parlare di SRP per quanto riguarda una responsabilità di livello inferiore, una responsabilità di implementazione interna, piuttosto che una responsabilità a livello di dominio. Considero questo design più debole con un accoppiamento più strong.