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

Вадим Мингажев: Функциональная бизнес-логика в C#

DotNetRu
October 22, 2019

Вадим Мингажев: Функциональная бизнес-логика в C#

DotNetRu

October 22, 2019
Tweet

More Decks by DotNetRu

Other Decks in Programming

Transcript

  1. О чем доклад •Место функциональных техник в C# •Проблемы, которых

    меньше в функциональных языках •Безопасная работа с примитивными типами •Борьба с NRE •Исключение исключений •«Железнодорожное программирование» •Бизнес-логика, понятная каждому 2
  2. Что хорошего в ФП •Сложно поймать NRE •Красивый и выразительный

    код •Сильная система типов •Сложнее написать неправильный код •Легко реализовать многопоточные операции 4
  3. Что есть в C# • Лямбды, функции высшего порядка •

    LINQ • Чистые функции • Pattern matching • Композиция функций • *Иммутабельность В дополнениях: • Монады Result, Maybe • ValueType<T> • Map, OnSuccess, OnFailure 5
  4. Другие методы •MapWithTransaction – для выполнения pipeline в транзакции БД

    •Tap – более современная версия OnSuccess •OnFailureCompensate – выполнение действия для устранения последствий ошибки •Combine – для комбинирования цепочки Result в один Result … 30
  5. Минусы •Много параметров типов в методах, нужно привыкнуть •Если бизнес-логика

    не «ложится» в pipeline, приходится писать странные методы •Сложно читать StackTrace •Иногда просачивается бессмысленный код вроде Result.Ok(). •Нужно понимать, как это работает (немного повышает порог входа) 31
  6. 33

  7. 34

  8. • Код приятнее писать (субъективно) • Код ближе к предметной

    области • Контракты информативны • Выполняется быстрее чем с исключениями • Логика не стала полностью функциональной Опыт использования 35
  9. Ссылки • http://hamidmosalla.com/2019/04/25/functional-programming-in-c -sharp-a-brief-guide/ • https://github.com/louthy/language-ext • https://github.com/morelinq/MoreLINQ • https://github.com/vkhorikov/CSharpFunctionalExtensions

    • https://github.com/reactiveui/ReactiveUI • https://hackernoon.com/is-c-7-starting-to-look-like-a-functional-lan guage-d4326b427aaa • https://fsharpforfunandprofit.com • https://nugetmusthaves.com/Tag/functional 37