¿Existen flujos de trabajo específicos o patrones de diseño que se usan comúnmente para crear grandes aplicaciones de programación funcional? [cerrado]

13

He estado explorando Clojure durante un tiempo, aunque no lo he usado en ningún proyecto no trivial. Básicamente, me he estado sintiendo cómodo con la sintaxis y algunos de los modismos. Viniendo de un entorno de OOP, con Clojure siendo el primer lenguaje funcional que he investigado mucho, naturalmente no estoy tan cómodo con la forma funcional de hacer las cosas.

Dicho esto, ¿existen flujos de trabajo específicos o patrones de diseño que sean comunes al crear grandes aplicaciones funcionales? Realmente me gustaría comenzar a usar la programación funcional "de verdad", pero me temo que con mi falta de experiencia actual, podría resultar en un fracaso épico.

La "Banda de los Cuatro" es un estándar para los programadores de OO, pero ¿hay algo similar que esté más dirigido al paradigma funcional? La mayoría de los recursos que he encontrado tienen excelentes pepitas de programación, pero no retroceden para dar un aspecto más amplio y arquitectónico.

Andrés
fuente
66
Algunos de los patrones GOF son realmente soluciones alternativas en lenguajes OO para cosas que ya proporciona la programación funcional. Ver stackoverflow.com/q/327955
Robert Harvey
2
relacionado: stackoverflow.com/q/89212
tirones del
Creo que en esta discusión hay demasiado énfasis en los patrones específicos de GoF / OOP. ¿Alguien puede publicar algunos patrones específicos de programación funcional real (que no solo intentan probar la trivialidad de GoF en lenguajes funcionales)?
Daniel B

Respuestas:

3

Los patrones de este tipo suelen ser síntomas de un modelo subyacente roto y no apto.

OOP está roto por diseño, no apto para la mayoría de sus aplicaciones, por lo tanto, estalla con todos los llamados "patrones". El modelo funcional es (solo un poco) más flexible, y la necesidad de "patrones" no es tan obvia allí.

Una vez que comience a aplicar un enfoque orientado al lenguaje (natural para los programadores funcionales), usando o creando DSL para cada dominio de problema específico, encontrará que no se muestran patrones, porque siempre está empleando un modelo adecuado para describiendo un problema

Por supuesto, algunos "patrones" o "recetas" recurrentes de alto nivel son inevitables incluso en las matemáticas muy abstractas, limpias y puras, pero son de un tipo diferente y de un nivel diferente de abstracción que los patrones GoF. Encontrarás mónadas útiles, por ejemplo.

SK-logic
fuente
+1 para los últimos 2 párrafos, creo que eso es perfecto. Con respecto a la OOP, tengo curiosidad sobre la razón detrás de llamarlo roto, además del hecho de que es una herramienta genérica que a menudo se aplica a problemas específicos (de ahí que existan patrones de bajo nivel como los GoF). ¿Puedes elaborar brevemente o publicar un enlace que resuma tu opinión?
Daniel B
@DanielB, no hay nada de malo en OOP per se, pero la forma en que se aplica generalmente está totalmente dañada. Este modelo se adapta solo a algunos de los problemas del mundo real (y realmente brilla allí, cuando se aplica adecuadamente), pero para el resto necesita todas las muletas y la cinta adhesiva para encajar. Vea mi respuesta en programmers.stackexchange.com/questions/52608/… por ejemplo.
SK-logic
OK, creo que estoy en la misma página. De hecho, es posible que haya hecho esta pregunta exacta una vez antes, perdón por eso, la forma en que redactó esa línea parece que implica más.
Daniel B
-3

En mi opinión personal, los patrones de diseño son semánticos. Recuerdo reescribir algunas de mis aplicaciones antiguas usando MVC solo para asegurarme de que entendía el patrón tan bien como pensaba. Pero, al final, no obtuve nada de MVC sobre mi código original.

Sin embargo, si tuviera que aplicar mi código original a un entorno de desarrollo más grande y decirle a alguien que hay un problema con este método determinado ... sería difícil para ese desarrollador rastrear el problema. SIN EMBARGO, si le dijera que el ContractController fue anulado por alguna razón, sabría exactamente por dónde empezar.

Los patrones de diseño son geniales ... pero como dije, ¡creo que son semánticos!

EDITAR: Ustedes, evangelistas, me hacen reír. ¡Cómo se desarrolló algo sin MVC (o algún otro patrón de diseño)!

aserwin
fuente
2
semántico (sɪˈmæntɪk) - adj 1. de o relacionado con el significado o que surge de las distinciones entre los significados de diferentes palabras o símbolos 2. de o relacionado con la semántica (el estudio del significado) 3. lógica relacionada con la interpretación de una teoría formal, como cuando se dan tablas de verdad como una cuenta de los conectivos sentenciales
Robert Harvey
+1: ¡mi punto era que los patrones de diseño son simplemente un medio de comunicación!
aserwin
Los patrones de diseño son más que una forma de comunicarse; son recetas concretas y bien entendidas que se pueden implementar en software para resolver ciertos problemas comúnmente encontrados.
Robert Harvey
Eso es lo que dicen los libros. Pero nunca resolví un problema a través de un patrón de diseño que no podría resolver sin él. ¡La única ventaja que he notado en mi propia experiencia es la capacidad de hablarnos sobre el código! ;)
aserwin
1
Con respecto a su edición: ¿Entonces preferiría reinventar la rueda cada vez que escriba un nuevo código?
Robert Harvey