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

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

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

Ответ 1

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

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

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

Введите безопасный построитель

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

получая

command (expr) {
  block
}

Ответ 4

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

Ответ 5

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

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