Шаблоны проектирования для функционально-ОО гибридных языков?

Уже есть какая-нибудь коллекция лучших практик для таких языков, как Scala?

Я нашел работу над шаблонами проектирования для функциональных языков, шаблонами проектирования для функционального стратегического программирования. Есть шаблоны проектирования GoF для ОО языков. Но есть ли шаблоны для функционально-OO-гибридов? Все, что я видел, это этот список. Что известно?

5 ответов

Решение

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

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

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

Тип безопасного строителя

Независимо расширяемые решения проблемы выражения - как и "Абстракция масштабируемого компонента", это не каталог шаблонов, но он также имеет дело с аналогичными проблемами (например, шаблон посетителя)

Устаревшая модель наблюдателя - альтернатива наблюдателю.

Мы также можем рассматривать эмуляцию Scala классов типа Haskell как шаблон проектирования. Первое описание (которое я мог найти по крайней мере) в Классах Типов Бедного Человека. Довольно много записей в блоге также доступны с этой темой.

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

Не являясь непосредственно каталогом шаблонов проектирования, статья " Абстракции масштабируемых компонентов" (Мартин Одерский; Матиас Ценгер) рассматривает три стандартных блока для повторно используемых компонентов:

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

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

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

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

получая

command (expr) {
  block
}

Поскольку любой объектно-функциональный язык быстро приобретет библиотеку акторов, большое число шаблонов на основе акторов, вероятно, отвечает этому вопросу. Практически любой из шаблонов в корпоративных интеграционных шаблонах Боба Мартина можно перестраивать с точки зрения действующих лиц, причем такие шаблоны, как балансировка нагрузки, фильтр сообщений, маршрутизатор на основе содержимого и обогащение содержимого, особенно часто встречаются в системах, построенных вокруг крупных участников.

Тесно связанные, вы можете изучить структуры данных, как это определено в чисто функциональных (или гибридных функциональных) языках. С одной стороны, способность обрабатывать функции как первоклассные значения делает некоторые шаблоны (такие как посетитель, метод шаблона или декоратор) ненужными в некоторых (не во всех) контекстах. Во-вторых, структуры данных (и алгоритмы, которые на них работают) являются либо основой для шаблонов проектирования, либо представляют определенные проблемы, которые пытаются решить шаблоны проектирования, см. Статью Википедии " Чисто функциональные".

А еще лучше, я отсылаю вас к тезису Окасаки о чисто функциональных структурах данных.

Другие вопросы по тегам