2010-06-21 17 views
41

¿Existe alguna colección de mejores prácticas para idiomas como Scala?¿Patrones de diseño para lenguajes híbridos funcionales OO?

He encontrado un trabajo sobre patrones de diseño para lenguajes funcionales, Design patterns for functional strategic programming. Hay patrones de diseño GoF para lenguajes OO. Pero, ¿hay algún patrón para los híbridos funcional-OO? Todo lo que he visto es this lista. ¿Lo que se sabe?

+0

El último enlace está roto (cerca de "Todo lo que he visto"). –

+1

Puede echar un vistazo a http://pavelfatin.com/design-patterns-in-scala/ –

Respuesta

19

Dos patrones de Bill Venners; Creo que ambos se usan mucho en ScalaTest:

Stackable Trait (similar en estructura al patrón del decorador, excepto que implica decoración con el fin de la composición de clase en lugar de la composición del objeto).

Selfless Trait (permite a los diseñadores de bibliotecas proporcionar servicios a los que sus clientes pueden acceder mediante mixins o importaciones).

Type safe builder

Independently Extensible Solutions to the Expression Problem - al igual que el "escalable componente de abstracción", que no es un catálogo de patrones, sino que también se ocupa de problemas similares (por ejemplo, el patrón Visitante)

Deprecating the Observer Pattern - una alternativa al Observador .

También podemos considerar la emulación de Scala de Haskell clases un patrón de diseño. La primera descripción (que pude encontrar al menos) está en Poor Man's Type Classes. Muy algunas entradas de blog también están disponibles con este tema.

Y creo que no estoy del todo equivocado si también menciono las distintas mónadas. Puede encontrar muchos recursos que tratan con ellos.

12

Aunque no está directamente un catálogo de patrones de diseño en sí mismo, el documento "Scalable Component Abstractions" (Martin Odersky; Matthias Zenger) examina tres bloques de construcción para componentes reutilizables:

  • miembros de tipo abstracto,
  • selftypes explícitas, y
  • composición de mezcla modular.

Y vuelve patrón de diseño de varios (publicación/suscripción, sujeto/observador, Contexto/Componente) para ilustrar y comprender el idioma construcciones son esenciales para lograr sistemas de componentes escalables y dinámicas.

5

Un patrón observado con frecuencia, que necesita urgentemente un nombre, es la creación de abstracciones de control con listas de parámetros al curry y parámetros de nombre.

def command(expr: T)(block: => Unit) {...} 

rendimiento

command (expr) { 
    block 
} 
+0

Dado algunos de los otros nombres "inquietos", ¿qué hay del patrón "Do Me"? –

+2

Por cierto, creo que debemos tener cuidado con la terminología y, en este caso, esta no es una * función * curry, sino un * método * con múltiples listas de argumentos. –

+0

que se parece a lo que se llama el patrón de "préstamo" en el wiik de Scala: http://scala.sygneca.com/patterns/loan –

4

En tanto como cualquier lenguaje-objeto funcional va rápidamente para adquirir una biblioteca actor, un gran número de patrones basado en los actores probablemente califican para esta pregunta. Casi todos los patrones en Enterprise Integration Patterns de Bob Martin son recastables en términos de actores, con patrones como Load Balancer, Message Filter, Content-Based Router y Content Enricher, que son especialmente comunes en sistemas diseñados alrededor de actores de grano grueso.

3

Muy relacionado, es posible que desee explorar las estructuras de datos definidas en purely functional (o los idiomas híbridos funcionales). Por un lado, la capacidad de tratar las funciones como valores de primera clase hace que algunos patrones (como visitor, template method o decorator) sean innecesarios en algunos (no todos) los contextos. En segundo lugar, las estructuras de datos (y los algoritmos que operan sobre ellas) son la fontanería para patrones de diseño, o presentan ciertos problemas que los patrones de diseño intentan abordar, vea el artículo de Wikipedia Purely functional.

Mejor aún, me referiría a Okasaki's thesis on purely functional data structures.

Cuestiones relacionadas