Во-первых, Мартин Фаулер описал три различных «шаблона» в своей книге «Шаблоны корпоративной архитектуры». Сценарий транзакции, активная запись и модель предметной области. DDD использует шаблон модели предметной области для всей архитектуры и описывает множество практик и шаблонов для реализации и проектирования этой модели.
Сценарий транзакции - это архитектура, в которой нет слоев. Этот же фрагмент кода читает / записывает базу данных, обрабатывает данные и обрабатывает пользовательский интерфейс.
Active Record на шаг впереди от этого. Вы отключили свой пользовательский интерфейс, ваша бизнес-логика и слой данных по-прежнему живут вместе в объектах активных записей, которые моделируются по базе данных.
Модель предметной области отделяет бизнес-логику, которая присутствует в вашей модели, от уровня данных. Модель ничего не знает о базе данных.
А теперь мы подошли к интересной части:
Стоимость этого дополнительного разделения, конечно, дополнительная работа. Преимущества - лучшая ремонтопригодность и гибкость.
Сценарий транзакции хорош, когда у вас мало или нет бизнес-правил, вы просто хотите ввести данные и не выполнять никаких шагов проверки, или вся проверка выполняется в базе данных.
Активная запись добавляет к этому некоторую гибкость. Поскольку вы отделяете свой пользовательский интерфейс, вы можете, например, повторно использовать слой под ним между приложениями, вы можете легко добавить некоторые бизнес-правила и логику проверки к бизнес-объектам. Но поскольку они все еще тесно связаны с базой данных, изменения в модели данных могут быть очень дорогими.
Вы используете модель предметной области, когда хотите отделить свою бизнес-логику от базы данных. Это позволяет вам легче справляться с изменяющимися требованиями. Проектирование на основе доменов - это метод оптимального использования этой дополнительной гибкости для реализации сложных решений без привязки к реализации базы данных.
Множество инструментов упрощает решения, основанные на данных. В пространстве Microsoft очень просто визуально создавать веб-сайты, где весь код находится прямо за веб-страницей. Это типичное решение для сценария транзакции, и оно отлично подходит для простого создания простых приложений. В Ruby on rails есть инструменты, облегчающие работу с активными объектами записи. Это может быть причиной для управления данными, когда вам нужно разработать более простые решения. Для приложений, где поведение важнее, чем данные, и трудно определить все поведение, так как сначала DDD - это путь.