Шаблоны проектирования для функционально-ОО гибридных языков? - PullRequest
41 голосов
/ 21 июня 2010

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

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

Ответы [ 5 ]

19 голосов
/ 21 июня 2010

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

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

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

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

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

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

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

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

12 голосов
/ 21 июня 2010

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

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

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

5 голосов
/ 21 июня 2010

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

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

урожайность

command (expr) {
  block
}
4 голосов
/ 21 июня 2010

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

3 голосов
/ 30 июня 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...