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.
Respuestas:
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.
fuente
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)!
fuente