Transaction Script VS Domain Model

Основное различие этих двух архитектурных подходов состоит в назначении модели (наборе доменных сущностей). Доменная сущность в Transaction Script является практически полным отображением таблицы в базе данных с геттерами и сеттерами, а весь функционал (поведение) объекта вынесено в сервисы. За соблюдение инвариантов отвечает сервис. Таким образом, Transaction Script формирует анемичную модель. В противовес этому подходу Domain Model подразумевает наличие у сущности (доменного объекта) не только данных, но и собственного поведения, которое используется в сервисах или агрегатах. Инвариантами в данном случае заведует модель.

Само по себе понятие инвариант означает что-то постоянное. В случае с DDD инвариантом можно назвать бизнес-правила которые должна жестко соблюдать модель. Например, все пользователи получающие жалобы в какой-нибудь из социальных сетей падают в рейтинге на N-е количество пунктов или при оформлении заказа более 1 000 рублей клиент получает скидку в 5%.

Какое решение выбрать для проекта — дело архитектора. Для проектов с малым количеством бизнес-логики (большинство веб-проектов как раз такие), обычно, выгоднее использовать подход Transaction Script, а для большого бизнес-слоя предпочтительнее выбрать Domain Model.

Добавить комментарий