Learning Domain-Driven Design — глава 2, часть 1
Участники выпуска
Полный состав этого выпуска пока не подтверждён источниками.
Что обсудили голосом
Второе заседание разбирает реализацию бизнес-логики. Transaction Script организует её вокруг процедур и атомарно фиксирует результат либо откатывает операцию. За простотой скрываются распределённые записи, повторы и идемпотентность: паттерн хорош для supporting-логики, но опасен в core domain.
Active Record — похожий процедурный подход поверх объектов и CRUD. Его и anemic domain model не объявляют безусловными антипаттернами: это практичные инструменты для простой модели. Сложному домену нужна domain model, которая отделяет бизнес-сложность от инфраструктуры и защищает переходы состояния.
Модель строят из value objects, entities, aggregates и domain services. Value object определяется значениями и обычно неизменяем, entity сохраняет идентичность. Aggregate задаёт транзакционную границу и инварианты; между агрегатами принимают eventual consistency. Domain service вычисляет правило, не изменяя несколько агрегатов вместе.
Event-sourced model хранит последовательность доменных событий вместо одного текущего снимка. Она даёт аудит, отладку, новые проекции и обработку конфликтов версий, но требует эволюции событий и snapshots. Для удаления персональных данных чувствительные значения предлагают шифровать с уничтожаемым ключом либо хранить вне событий.