Blending Functional and OO Programming in Ruby, by Piotr Solnica
Посмотрел старое выступление Петра Сольницы о том, как он работает (работал) с Ruby on Rails.
- Почему мы используем OOD (Object Oriented Design)? Потому что он позволяет справляться со сложностью (кода)
- Функциональные объекты
- неизменяемые (immutable)
- имеют один общий интерфейс -
#call(input)
- никаких side effects
- всегда что-то возвращают
- Работать с неизменяемыми (immutable) объектами сложно, они толкают на создание другой архитектуры приложения
- состояние = данные, приоритет отдается объектам без состояния (stateless objects)
- подход (который предлагает Сольница) позволяет разделить структуру приложения с его поведением
- всё ради того, чтобы упростить вещи: нет изменяемости - проще вносить изменения (в приложение), проще делать композицию объектов и функций
- функциональные интерфейсы - хороший фундамент для построения high-level OO abstractions (так понятнее будет, если не переводить)
В докладе Пётр (правильно так переводить с польского?) привел несколько концепций функционального дизайна, который накладывается на объектную модель Ruby, и она не выглядит дикой химерой. Примеры, которые он приводит с логером или транзакциями, гораздо проще для понимания, чем в “классическом” ООП с тонной абстракций.
Доклад короткий, концепции из доклада могут заразить вас функциональным программированием, смотреть с осторожностью.