Шаблоны проектирования для функционально-ОО гибридных языков?
Уже есть какая-нибудь коллекция лучших практик для таких языков, как Scala?
Я нашел работу над шаблонами проектирования для функциональных языков, шаблонами проектирования для функционального стратегического программирования. Есть шаблоны проектирования GoF для ОО языков. Но есть ли шаблоны для функционально-OO-гибридов? Все, что я видел, это этот список. Что известно?
5 ответов
Два образца от Билла Веннерса; Я думаю, что оба активно используются в ScalaTest:
Стекируемая черта (похожа по структуре на шаблон декоратора, за исключением того, что она включает декорацию с целью композиции классов вместо композиции объектов).
Selfless Trait (позволяет разработчикам библиотек предоставлять услуги, к которым их клиенты могут получить доступ либо через миксины, либо через импорт).
Независимо расширяемые решения проблемы выражения - как и "Абстракция масштабируемого компонента", это не каталог шаблонов, но он также имеет дело с аналогичными проблемами (например, шаблон посетителя)
Устаревшая модель наблюдателя - альтернатива наблюдателю.
Мы также можем рассматривать эмуляцию Scala классов типа Haskell как шаблон проектирования. Первое описание (которое я мог найти по крайней мере) в Классах Типов Бедного Человека. Довольно много записей в блоге также доступны с этой темой.
И я думаю, что я не совсем ошибаюсь, если я упомяну различные монады. Вы можете найти много ресурсов, связанных с ними.
Не являясь непосредственно каталогом шаблонов проектирования, статья " Абстракции масштабируемых компонентов" (Мартин Одерский; Матиас Ценгер) рассматривает три стандартных блока для повторно используемых компонентов:
- члены абстрактного типа,
- явные автотипы и
- Модульная миксиновая композиция.
И он пересматривает несколько шаблонов проектирования (публикация / подписка, субъект / наблюдатель, контекст / компонент), чтобы проиллюстрировать и понять, какие языковые конструкции необходимы для создания систем масштабируемых и динамических компонентов.
Одним из часто встречающихся шаблонов, которому крайне необходимо имя, является создание абстракций управления со списками параметров каррирования и параметрами по имени.
def command(expr: T)(block: => Unit) {...}
получая
command (expr) {
block
}
Поскольку любой объектно-функциональный язык быстро приобретет библиотеку акторов, большое число шаблонов на основе акторов, вероятно, отвечает этому вопросу. Практически любой из шаблонов в корпоративных интеграционных шаблонах Боба Мартина можно перестраивать с точки зрения действующих лиц, причем такие шаблоны, как балансировка нагрузки, фильтр сообщений, маршрутизатор на основе содержимого и обогащение содержимого, особенно часто встречаются в системах, построенных вокруг крупных участников.
Тесно связанные, вы можете изучить структуры данных, как это определено в чисто функциональных (или гибридных функциональных) языках. С одной стороны, способность обрабатывать функции как первоклассные значения делает некоторые шаблоны (такие как посетитель, метод шаблона или декоратор) ненужными в некоторых (не во всех) контекстах. Во-вторых, структуры данных (и алгоритмы, которые на них работают) являются либо основой для шаблонов проектирования, либо представляют определенные проблемы, которые пытаются решить шаблоны проектирования, см. Статью Википедии " Чисто функциональные".
А еще лучше, я отсылаю вас к тезису Окасаки о чисто функциональных структурах данных.