Récemment, j'ai beaucoup entendu le terme programmation réactive. Mais quand je l'ai cherché, ce que j'ai découvert n'était que quelques similitudes avec modèle d'observateur. En fait, je ne trouve pas de différence entre eux. Quelle est la différence conceptuelle entre eux et pourquoi le terme programmation réactive est en train de bourdonner?
La programmation réactive est le paradigme général derrière la propagation facile des changements dans un flux de données à travers l'exécution d'un programme. Ce n'est pas un modèle ou une entité spécifique en soi, c'est une idée ou un style de programmation (comme le prorgamming orienté objet, la programmation fonctionnelle, etc.) En gros, c'est le concept que lorsque x
change ou se met à jour dans un seul emplacement, les éléments qui dépendent de la valeur de x
sont recalculés et mis à jour dans divers autres emplacements de manière non bloquante, sans avoir à attacher des fils assis juste en attendant que des événements se produisent.
Traditionnellement, vous avez presque toujours vu le modèle ci-dessus où x
est un événement GUI. La plupart des bibliothèques GUI sont à thread unique, vous ne pouvez donc pas attacher ce thread en attendant une réponse. C'est là que le modèle d'observateur entre en jeu - il fournit une méthode courante pour fournir un "déclencheur" pour permettre aux informations d'être mises à jour chaque fois qu'un tel changement est effectué (ou, en termes plus courants OO, quand un "événement" est déclenché.) En ce sens, il fournit un simple mécanisme pour permettre au très concept de base de la programmation réactive de se produire dans OO (et parfois d'autres) langages de style.
Le concept plus complet de programmation réactive va bien au-delà du modèle d'observateur traditionnel - au lieu de simplement déclencher une action particulière sur un seul événement (tel qu'un clic d'utilisateur), vous pouvez créer et vous abonner aux éditeurs de ces événements, définir des actions à exécuter en fonction des événements qui se produisent sur cet éditeur, appliquez la contre-pression pour contrôler la vitesse de cet éditeur, contrôler le threading de ce flux, etc.
Je suis un expert en programmation réactive et je développe activement de nouveaux outils pour la programmation réactive. Tels que la causalité ( https://github.com/erobwen/causality )
Une façon simple de le dire est que la programmation réactive est ce qui va au-delà de l'utilisation du modèle d'observateur avec ses "rappels" et "écouteurs". Avec la programmation réactive, on suppose qu'il existe un niveau d'automatisation plus élevé où la plate-forme gère toutes les dépendances de données et d'interface utilisateur. Donc, en règle générale, si le modèle d'observateur est utilisé, ce n'est pas un système réactif.
Une autre façon de savoir si un paradigme de programmation est réactif ou non, est si vous écrivez du code qui met à jour les structures de données et les composants d'interface utilisateur, ou si vous écrivez du code qui semble créer uniquement les composants d'interface utilisateur en premier lieu. Par conséquent:
Programmation non réactive: code qui crée l'interface utilisateur + code qui met à jour l'interface utilisateur.
Programmation réactive: un bloc de code qui crée l'interface utilisateur (qui sera également utilisé pour les mises à jour)
Par exemple, une façon non réactive de mettre à jour votre interface utilisateur consiste à avoir un écouteur d'événements pour écouter un clic sur un bouton, et si l'utilisateur clique sur ce bouton, vous trouvez alors l'endroit approprié dans le DOM, où vous définissez une propriété , ajoutez un enfant ou ajoutez une classe pour pour que quelque chose se passe.
Pour faire la même chose réactivement, vous devez lier l'état du bouton à une variable de mode d'affichage, puis lier à son tour la propriété que vous souhaitez modifier à cette variable de mode d'affichage. Ensuite, lorsque l'utilisateur appuie sur le bouton, le système saura automatiquement comment mettre à jour le DOM.
Des exemples modernes et populaires de programmation réactive sont React et Angular. La chose qui rend React réactif par exemple, c'est que chaque composant déclare sa fonction "render" à construire l'interface utilisateur d'un composant. L'essentiel est que cette fonction de rendu sera utilisée à la fois lors du rendu initial du composant, mais aussi lorsque des modifications de l'état des données/de l'interface utilisateur entraîneront des modifications dans l'interface utilisateur.