Oui, FP peut être utilisé dans les applications d'entreprise. Clojure est un exemple de langage FP avec succès en entreprise: http://cognitect.com/clojure#successstories
Représenter l'État peut être un défi dans la PF et changer les paradigmes pour s'adapter à la PF peut être un peu une déformation mentale. Certains langages FP interdisent complètement les effets secondaires et l'état mutable. Clojure permet les deux mais décourage ou isole ces paradigmes.
En bref, la représentation de l'État peut être très similaire à l'OO. C'est une modification d'état qui est très différente. Ainsi, par exemple, dans l'état FP peut être représenté par des listes et des cartes. Une liste d'employés peut ressembler à:
[[name: "James Brown" address: "Barnwell, SC"]
[name: "Elvis Presley" address: "Tupelo, MS"]]
Je connais deux façons de gérer la modification d'état dans FP. L'un est quelque chose comme la programmation réactive fonctionnelle. Dans ce paradigme, tous les états sont gérés au plus haut niveau uniquement ... par exemple, une vue HTML de votre application a un état dans la vue (comme le nom, l'adresse, etc.) de la personne. Maintenant, lorsque vous cliquez sur "mettre à jour le nom", une fonction est appelée qui gère tout ce qui concerne une mise à jour de nom, sauf en réalité le changement de nom. Cela peut sembler bizarre ... mais supportez-moi. Le nom modifié serait alors renvoyé par la fonction et la vue (ou le magasin de données persistantes, etc.) affichera le nouveau nom. Ou bien, une nouvelle structure entière avec le nom mis à jour sera retournée. Alors, que fait la fonction? Il valide le nom et renvoie le nouveau nom s'il est valide, une erreur s'il ne l'est pas, et éventuellement une nouvelle vue ou un nouveau lien de navigation à suivre. Pour quelque chose de plus complexe qu'un changement de nom, cela peut faire beaucoup plus.
Ainsi, pour FRP, l'objet renvoyé par la fonction est le nouvel état et peut être donné directement à la vue ou à tout ce qui se trouve au niveau supérieur. Dans certains cas, FRP prend tout l'état, le transmet à la fonction et récupère tout l'état.
Avec ce paradigme, le conteneur ou le framework doit gérer la mise à jour de l'affichage, de la base de données ou de tout autre élément à mettre à jour à partir du nouvel état. Vous pouvez donc imaginer un cadre qui dessine l'application à l'écran. Lorsqu'un utilisateur clique sur quelque chose, les fonctions sont appelées et le nouvel état est renvoyé. Le cadre met ensuite à jour l'écran en redessinant tout ou en redessinant intelligemment des parties de l'affichage. Voir http://blog.getprismatic.com/om-sweet-om-high-functional-frontend-engineering-with-clojurescript-and-react/
Clojure utilise le deuxième paradigme que j'ai rencontré et qui est d'isoler les changements d'état mais pas nécessairement de les restreindre au plus haut niveau. Avec Clojure, tous les états mutables doivent être "maintenus" (sauf si vous utilisez des objets Java pour l'état) par un atome, un agent ou une référence. La façon dont cela fonctionne est l'objet détenu ou pointé ou référencé (comme vous voulez l'appeler) par l'atome / agent / ref est immuable, mais l'atome / agent / ref peut changer pour pointer vers un nouvel objet. Dans ce cas, vous utilisez des méthodes spéciales sur l'atome / l'agent / ref qui disent "mettre à jour l'objet ici en faisant telle ou telle chose et en réaffectant l'atome / l'agent / ref à un nouvel objet".
Pourquoi est-ce bénéfique que vous pourriez demander? Parce que l'objet immuable référencé par ces constructions Clojure peut être passé à une fonction qui fait quelque chose et pendant que cette fonction exécute sa référence à l'objet est garanti de ne pas changer. Autrement dit, l'atome / agent / ref n'est pas transmis à la fonction mais l'objet immuable pointé par eux est transmis. Les atomes, les agents et les références ont des propriétés spéciales qui gèrent les mises à jour et la concurrence de manière sûre et faisant partie du langage. Voir http://clojure.org/state
J'espère que ça aide. Je suggère de lire davantage sur l'état de Clojure et le FRP pour mieux comprendre comment les employés et les personnes peuvent être représentés dans la PF. Cependant, la représentation réelle serait similaire à la programmation orientée objet ... c'est la mutabilité qui est vraiment différente.