Come può l'architettura "Functional Core / Imperative Shell" di Gary Bernhardt essere utilizzata per progettare software per un sistema di ascensori ?
In particolare, diciamo che ci sono alcuni ascensori, ognuno con pulsanti di chiamata (uno per piano). Ogni ascensore ha sensori che riportano velocità, posizione e stato dei pulsanti, e un controller che accetta istruzioni come salire, scendere, fermarsi. Inoltre ogni piano ha sensori che riportano lo stato dei pulsanti di chiamata su e giù.
Scegli ciò che è più facile per IO, come messaggi affidabili o altro. Scegli tutto ciò che è meglio in termini di concorrenza (multiprocessing, multithreading o solo codice asincrono).
Un sistema di ascensori avanzato basa le sue decisioni su qualcosa di più della semplice posizione attuale, la velocità di ogni ascensore e lo stato dei pulsanti di richiesta sui piani e all'interno dell'ascensore. In particolare, per fornire istruzioni agli ascensori, sarebbe necessario sapere quanto tempo fa accaddero vari eventi (per migliorare l'equità) e forse anche quello della storia recente (questo aiuterebbe a prevedere le richieste future).
Ma fornire così tante informazioni come input per una pura funzione sembra molto complicato.
Ci sto pensando male, oppure questo problema non è proprio adatto a quell'architettura?
Modifica: come ha sottolineato @ThomasKilian, il discorso a cui mi riferisco potrebbe non essere così noto come pensavo. Quindi lasciatemi espandere la domanda: mi interessa qualsiasi approccio in cui tutta la logica aziendale non banale è codificata per lo più usando lo stile di programmazione funzionale.