J'explore Clojure depuis un moment maintenant, même si je ne l'ai pas utilisé sur des projets non triviaux. Fondamentalement, je viens de me familiariser avec la syntaxe et certains des idiomes. Venant d'un milieu OOP, avec Clojure étant le premier langage fonctionnel que j'ai beaucoup étudié, je ne suis naturellement pas aussi à l'aise avec la façon fonctionnelle de faire les choses.
Cela dit, existe-t-il des flux de travail ou des modèles de conception spécifiques communs à la création de grandes applications fonctionnelles? J'aimerais vraiment commencer à utiliser la programmation fonctionnelle "pour de vrai", mais je crains qu'avec mon manque actuel d'expertise, cela aboutisse à un échec épique.
Le "Gang of Four" est un tel standard pour les programmeurs OO, mais y a-t-il quelque chose de similaire qui est plus orienté vers le paradigme fonctionnel? La plupart des ressources que j'ai trouvées ont d'excellentes pépites de programmation, mais elles ne reculent pas pour donner un aspect plus large et plus architectural.
Réponses:
Les modèles de ce type sont généralement les symptômes d'un modèle sous-jacent cassé et impropre.
La POO est brisée par sa conception, impropre à la plupart de ses applications, donc elle regorge de tout ce que l'on appelle des "motifs". Le modèle fonctionnel est (juste un peu) plus flexible, et le besoin de "modèles" n'est pas si évident là-bas.
Une fois que vous commencez à appliquer une approche orientée langage (naturelle pour les programmeurs fonctionnels), en utilisant ou en créant des DSL pour chaque domaine de problème spécifique, vous constaterez qu'aucun modèle n'apparaît du tout, car vous utilisez toujours un modèle adéquat pour décrivant un problème.
Bien sûr, certains «modèles» ou «recettes» récurrents de haut niveau sont inévitables même dans les mathématiques très abstraites, propres et pures, mais ils sont d'un type différent et d'un niveau d'abstraction différent des modèles GoF. Vous trouverez des monades utiles, par exemple.
la source
À mon avis, les modèles de conception sont sémantiques. Je me souviens avoir réécrit certaines de mes anciennes applications à l'aide de MVC juste pour m'assurer que je comprenais le modèle aussi bien que je le pensais. Mais, à la fin, je n'ai rien gagné de MVC par rapport à mon code d'origine.
Cependant, si je devais appliquer mon code d'origine à un environnement de développement plus large et dire à quelqu'un qu'il y a un problème avec cette certaine méthode ... il serait difficile pour ce développeur de rechercher le problème. TOUTEFOIS, si je disais que le ContractController était enlisé pour une raison quelconque, il saurait exactement par où commencer.
Les modèles de conception sont excellents ... mais comme je l'ai dit, je pense qu'ils sont sémantiques!
EDIT: Vous, les types évangélistes, me fâchez. Comment quelque chose a-t-il pu être développé sans MVC (ou un autre modèle de conception)!
la source