Existe-t-il des flux de travail ou des modèles de conception spécifiques qui sont couramment utilisés pour créer de grandes applications de programmation fonctionnelle? [fermé]

13

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.

Andrew
la source
6
Certains des modèles GOF ne sont en fait que des solutions de contournement dans les langages OO pour des choses que la programmation fonctionnelle fournit déjà. Voir stackoverflow.com/q/327955
Robert Harvey
2
en relation: stackoverflow.com/q/89212
remorqueurs
Je pense qu'il y a un peu trop d'attention sur les modèles spécifiques au GoF / OOP dans cette discussion. Quelqu'un peut-il publier des modèles spécifiques à la programmation fonctionnelle (qui n'essaient pas seulement de prouver la trivialité du GoF dans les langages fonctionnels)?
Daniel B

Réponses:

3

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.

SK-logic
la source
+1 pour les 2 derniers paragraphes, je pense que c'est parfait. En ce qui concerne la POO, je suis curieux de savoir pourquoi il est qualifié de cassé, à part le fait qu'il s'agit d'un outil générique souvent appliqué à des problèmes spécifiques (d'où des modèles de bas niveau comme ceux du GoF qui existent). Pouvez-vous élaborer en bref ou publier un lien résumant votre opinion?
Daniel B
@DanielB, il n'y a rien de mal avec la POO en soi, mais la façon dont elle est généralement appliquée est totalement cassée. Ce modèle ne correspond qu'à quelques-uns des problèmes du monde réel (et il brille vraiment là-bas, lorsqu'il est appliqué correctement), mais pour le reste, il a besoin de toutes ces béquilles et du ruban adhésif pour s'adapter. Voir ma réponse sur programmers.stackexchange.com/questions/52608/… par exemple.
SK-logic
OK, je pense que je suis sur la même longueur d'onde. En fait, j'ai peut-être déjà posé cette question une fois auparavant, désolé - la façon dont vous avez formulé cette ligne semble simplement impliquer davantage.
Daniel B
-3

À 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)!

aserwin
la source
2
sémantique (sɪˈmæntɪk) - adj 1. de ou se rapportant au sens ou résultant de distinctions entre les significations de différents mots ou symboles 2. de ou se rapportant à la sémantique (l'étude du sens) 3. logique concernée par l'interprétation d'une théorie formelle, comme lorsque des tables de vérité sont données comme compte des connecteurs sensibles
Robert Harvey
+1 - mon point était que les modèles de conception sont simplement un moyen de communication!
aserwin
Les modèles de conception sont plus qu'un simple moyen de communiquer; ce sont des recettes concrètes et bien comprises qui peuvent être mises en œuvre dans un logiciel pour résoudre certains problèmes courants.
Robert Harvey
C'est ce que disent les livres. Mais je n'ai jamais réellement résolu un problème grâce à un modèle de conception que je ne pourrais pas résoudre sans lui. Le seul avantage que j'ai remarqué dans ma propre expérience est la capacité de se parler du code! ;)
aserwin
1
Concernant votre montage: Vous préférez donc réinventer la roue à chaque fois que vous écrivez un nouveau morceau de code?
Robert Harvey