Attualmente sto implementando una classe per un protocollo di rete. Il protocollo utilizza una macchina a stati finiti abbastanza complessa ed estesa. Una coppia di eventi più uno stato viene associata a una funzione, che funziona e imposta il nuovo stato.
Dato che ci sono circa 150 combinazioni stato / evento valide e 28 funzioni distinte da chiamare, ho rifattorizzato l'intera logica dello stato lontano dall'associare / inviare / ricevere / ... (chiamiamola classe di servizio) in un separato classe statemachine. Il problema è che alcune di queste 28 funzioni richiedono l'accesso alla classe di servizio, ad esempio per ripristinare un timer di scadenza.
Quello che potrei fare è fare amicizia con la classe statemachine e la classe di servizio, in modo che possano accedere ai reciproci interni. Ciò introdurrebbe un accoppiamento molto stretto (anche se naturale, dato che appartengono insieme). Potrei anche lasciare entrambe queste classi in una, ma ciò risulterebbe in una classe enorme.
Ma poiché dubito che io sia il primo a dover affrontare questo problema, presumo che esista una soluzione più o meno standardizzata per questo che non ho ancora trovato.