2010-06-21 4 views
41

Есть ли какая-либо коллекция лучших практик для таких языков, как Scala?Дизайн шаблонов для функциональных гибридных языков OO?

Я нашел работу по шаблонам проектирования для функциональных языков, Design patterns for functional strategic programming. Есть GoF шаблоны проектирования для языков OO. Но существуют ли какие-либо шаблоны для функциональных гибридов OO? Все, что я видел, это список this. Что известно?

+0

Последнее ссылка не работает (около "Все, что я видел"). –

+1

Вы можете взглянуть на http://pavelfatin.com/design-patterns-in-scala/ –

ответ

19

Два шаблона с Билл Venners; Я думаю, что оба они широко используются в ScalaTest:

Stackable Trait (аналогично по структуре декоратору, за исключением того, что он включает в себя декорирование с целью композиции класса вместо композиции объекта).

Selfless Trait (позволяет разработчикам библиотек предоставлять услуги, которые их клиенты могут получить через посредники или импорт).

Type safe builder

Independently Extensible Solutions to the Expression Problem - так же, как «Scalable Компонента абстракции», это не каталог шаблон, но он также имеет дело с подобными проблемами (например, шаблон Visitor)

Deprecating the Observer Pattern - альтернатива Наблюдателя ,

Мы также можем рассмотреть эмуляцию Scala классов классов Haskell. Первое описание (которое я мог найти, по крайней мере) находится в Poor Man's Type Classes. В этом разделе также доступны некоторые записи в блоге.

И я думаю, что я не совсем ошибаюсь, если упомянуть также о разных монадах. Вы можете найти много ресурсов, связанных с ними.

12

Хотя не непосредственно сам дизайн каталога рисунок, бумага «Scalable Component Abstractions» (Одерски, Matthias Зенгер) рассматривает три строительные блоки для многократного использования компонентов:

  • абстрактные элементы типа,
  • явные selftypes, и
  • модульная композиция смесина.

И он пересматривает несколько шаблонов проектирования (публикация/подписка, тема/наблюдатель, контекст/компонент), чтобы проиллюстрировать и понять, какие языковые конструкции необходимы для достижения систем масштабируемых и динамических компонентов.

5

Одним часто наблюдаемым образцом, который очень нуждается в имени, является создание абстракций управления с помощью карриных списков параметров и параметров имени.

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

получая

command (expr) { 
    block 
} 
+0

Учитывая некоторые другие «острые» имена, как насчет шаблона «Сделай меня»? –

+2

Кстати, я думаю, что мы должны быть осторожны с терминологией, и в этом случае это не валютная * функция *, а метод * с несколькими списками аргументов. –

+0

Это похоже на то, что называется шаблоном «кредит» на Scala wiik: http://scala.sygneca.com/patterns/loan –

4

В так же, как и любой объект-функциональный язык быстро собирается приобрести библиотеку актер, большое количество моделей актерского основе, вероятно, претендовать на этот вопрос. Почти любой из шаблонов в Bob Martin's Enterprise Integration Patterns перестраивается с точки зрения актеров, с такими шаблонами, как Load Balancer, Message Filter, Content-Based Router и Content Enricher, особенно распространенным в системах, созданных вокруг крупнозернистых участников.

3

Близко связанные, вы можете изучить структуры данных, как определено в purely functional (или гибридных функциональных) языках. Во-первых, способность рассматривать функции как первоклассные значения делает некоторые шаблоны (например, visitor, template method или decorator) ненужными в некоторых (не всех) контекстах. Во-вторых, структуры данных (и алгоритмы, которые действуют на них) являются либо сантехникой для шаблонов проектирования, либо представляют определенные проблемы, которые пытаются решить шаблоны, см. Статью Википедии Purely functional.

Еще лучше, я бы назвал вас Okasaki's thesis on purely functional data structures.

Смежные вопросы