Знакомство с DDD

  • Хотелось писать сложную бизнес-логику простым способом
  • Жертвуем производительностью ради простоты понимания
  • Код становится понятнее, но бизнес-логику по прежнему неудобно писать

Сложности C# + DDD

Value object

Почему не struct

  • VO — design concept
  • Struct — technical implementation
  • Нет наследования
  • Нужно перегружать операторы сравнения

Bounded context

Ubiquitous language

Склад

  • Продукт
  • Перевозка
  • Логистика
  • Трекинг
  • ...

Choice

Domain model

States & transitions

Почему именно такой дизайн

  • Каждому состоянию соответствует свой собственный набор данных
  • Все состояния явно задекларированы
  • Все переходы между состояниями явно задекларированы
  • Всё это заставляет учитывать все возможные ситуации

Когда F# не оч

  • Иммутабельность
    • выделение памяти на каждую модификацию
    • код CLR не оптимизирован
  • Суровый внешний мир и его исключения
    • БД
    • Сеть

Если интересно

  • http://fsharpforfunandprofit.com/ddd/
  • https://www.pluralsight.com/courses/domain-driven-design-in-practice
    • Видео о том как больно писать DDD на C#
  • https://www.youtube.com/watch?v=a4fD2Nl7R0A
    • Когда F# не очень

fsharp + ddd

By koteek

fsharp + ddd

  • 583