Il s'agit principalement d'une question de programmation fonctionnelle plutôt que d'Elixir, mais puisque j'apprends Elixir ce serait bien si quelqu'un peut y répondre en utilisant cette langue. Même ainsi, si quelqu'un veut donner une réponse plus générale, ce sera apprécié.Elixir - Changement de comportement
Je suis moi-même un programmeur OO et je ne peux pas comprendre comment changer le comportement d'un composant basé sur un fichier de configuration (par exemple).
Exemple: J'ai une application qui charge/enregistre des utilisateurs à partir d'une base de données. Dans un environnement de production, je souhaite que mes utilisateurs soient sauvegardés et récupérés à partir d'une base de données MongoDB, tandis qu'en développement et en test, je souhaite utiliser une carte en mémoire. Si je programmais un système donné dans une langue OO (disons Java), je ferais simplement une interface nommée "UserRepository" avec 2 implémentations: "MemoryUserRepository" et "MongoDBUserRepository". J'instancierais alors le Repository correspondant basé sur un fichier de configuration (ou le coderait en dur, peu importe) au démarrage et juste après, tous les objets qui interagissent avec le Repository ne connaîtront jamais son implémentation (ils utiliseront un référentiel, mais ne s'en souciera jamais si c'est en mémoire ou en mongo). Cela me donne la possibilité de créer autant d'implémentations que je veux et la seule chose que je dois faire pour changer le comportement du système est d'instancier l'implémentation que je veux utiliser.
Je veux le même comportement mais dans Elixir (utilisons le même exemple). Comme ce n'est pas un langage orienté objet, je ne peux pas utiliser l'approche ci-dessus. Évidemment, je veux qu'il soit extensible (je pourrais facilement passer une chaîne avec le type de référentiel que je veux utiliser dans chaque appel et utiliser la correspondance de modèles pour déterminer le comportement à utiliser, mais cela ne va pas bien parce que chaque fois vouloir ajouter une implémentation, je devrai regarder dans chaque morceau de code je suis le modèle correspondant au type et ajouter la nouvelle implémentation). Quelle serait la meilleure approche pour y parvenir?
Merci d'avance!
Une correction. OO et Functional ne sont pas orthogonaux entre eux. True Elixir n'a pas de cours mais cela ne veut pas dire qu'il ne le peut pas. –