Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Роман Неволин «Почему ваша архитектура функциональная и как с этим жить»

Роман Неволин «Почему ваша архитектура функциональная и как с этим жить»

Если ваш проект — не дремучее легаси, то, скорее всего, он имеет в основе какую-нибудь модную архитектурную концепцию. CQRS, например. Или DDD. А может, Actor Model? Впрочем, без разницы — все они так или иначе связаны с миром функционального программирования. И даже если на вашей футболке написано «OOP only and forever», вы, вероятно, каждый день пишете функциональный код.

Как так вышло, в чем это выражается, как с этим жить и чем понимание принципов функциональной архитектуры может помочь улучшить ваш код? Обо всем этом мы с вами и поговорим.

DotNetRu

May 22, 2019
Tweet

More Decks by DotNetRu

Other Decks in Programming

Transcript

  1. О чем мы сегодня? • Что такое функциональное программирование и

    почему оно важно прямо сейчас • Какие идеи возникли вокруг функционального подхода и как применить их в каждодневной разработке
  2. О чем мы сегодня? • Что такое функциональное программирование и

    почему оно важно прямо сейчас • Какие идеи возникли вокруг функционального подхода и как применить их в каждодневной разработке • Как эти идеи используются в современной архитектуре
  3. Чем характерна чистая функция? • Не изменяет состояние • Не

    производит побочных эффектов • Выдает одинаковый результат «на выходе» при одинаковых входных параметрах
  4. И за это мы получаем • Параллельность «из коробки» •

    Простота отладки и тестирования • Отказоустойчивость
  5. И за это мы получаем • Параллельность «из коробки» •

    Простота отладки и тестирования • Отказоустойчивость • Развертывание без перезапуска
  6. Немного выводов • Всевозможные валидации и авторизации можно сделать частью

    пайплайна • Самый простой способ обработки ошибок — правильные бизнес исключения (но есть варианты)
  7. Немного выводов • Всевозможные валидации и авторизации можно сделать частью

    пайплайна • Самый простой способ обработки ошибок — правильные бизнес исключения (но есть варианты) • Для получения всех преимуществ функционального пайплайна нужно избавиться от побочных эффектов
  8. Немного выводов • Всевозможные валидации и авторизации можно сделать частью

    пайплайна • Самый простой способ обработки ошибок — правильные бизнес исключения (но есть варианты) • Для получения всех преимуществ функционального пайплайна нужно избавиться от побочных эффектов • Но можно получать не все
  9. На самом деле, стало лучше! • Cигнатура функции более точна

    • К нашим услугам все фичи, связанные с nullability
  10. На самом деле, стало лучше! • Cигнатура функции более точна

    • К нашим услугам все фичи, связанные с nullability • Теперь получить null reference чуть сложнее
  11. Модели вместо Optional полей • Уменьшается количество проверок • Типы

    в коде становятся более «описательными» • Сложнее передать неверное значение
  12. Модели вместо Optional полей • Уменьшается количество проверок • Типы

    в коде становятся более «описательными» • Сложнее передать неверное значение • Приходится писать больше моделей
  13. Обертки вместо примитивов • Мы точнее описываем назначение функции •

    Передать неверное значение намного сложнее • В создание типа можно добавить валидацию
  14. CQRS • Код с побочными эффектами отделен от кода без

    них • Чтение легко масштабируется
  15. CQRS • Код с побочными эффектами отделен от кода без

    них • Чтение легко масштабируется • Мы можем частично использовать преимущества функционального пайплайна
  16. Actor Model • Актор может служить имплементацией «чистого» пайплайна •

    Модель позволяет легко изолировать «грязную» логику
  17. Actor Model • Актор может служить имплементацией «чистого» пайплайна •

    Модель позволяет легко изолировать «грязную» логику
  18. DDD

  19. DDD • Все объекты и их состояния должны соответствовать единому

    языку • Состояния должны быть изолированы
  20. DDD • Все объекты и их состояния должны соответствовать единому

    языку • Состояния должны быть изолированы • Мы описываем переходы между этими состояниями
  21. DDD • Все объекты и их состояния должны соответствовать единому

    языку • Состояния должны быть изолированы • Мы описываем переходы между этими состояниями • ФП способствуем двум важнейшим целям — избавить бизнес-логику от сторонних зависимостей и корректно описать состояния
  22. И за это мы получаем • Параллельность «из коробки» •

    Простота отладки и тестирования • Отказоустойчивость • Развертывание без перезапуска
  23. Итого • Чтобы воспользоваться отдельными преимуществами функционального подхода, нет нужды

    писать все функционально • Если изолировать те места, где ваш код «чистый» — можно очень сильно упростить себе масштабирование и многое другое
  24. Итого • Чтобы воспользоваться отдельными преимуществами функционального подхода, нет нужды

    писать все функционально • Если изолировать те места, где ваш код «чистый» — можно очень сильно упростить себе масштабирование и многое другое • А отдельные идеи из функционального программирования неплохо применяются вне зависимости от стиля