Подтвердить что ты не робот

Когда использовать разработку, основанную на домене, и разработку базы данных?

Может ли кто-нибудь иметь хороший ответ, когда следует использовать разработку, основанную на базе данных, и когда следует использовать разработку, основанную на домене. Эти оба подхода к развитию имеют важное значение в их уважаемых областях. Но я не настолько ясен, какой подход подходит в какой ситуации. Любые рекомендации?

4b9b3361

Ответ 1

Сначала на каком-то фоне Мартин Фаулер фактически описал три разных "шаблона" в своей книге "Шаблоны архитектуры предприятия". Транзакция Script, активная запись и модель домена. DDD использует модель модели домена для общей архитектуры и описывает множество практик и шаблонов для реализации и проектирования этой модели.

Транзакция script - это архитектура, в которой у вас нет слоев. Тот же кусок кода считывает/записывает базу данных, обрабатывает данные и обрабатывает пользовательский интерфейс.

Активная запись на один шаг выше. Вы отделили свой пользовательский интерфейс, ваша бизнес-логика и уровень данных все еще живут вместе в активных объектах записи, которые моделируются после базы данных.

Модель домена отделяет бизнес-логику, которая живет в вашей модели от вашего уровня данных. Модель ничего не знает о базе данных.

И теперь мы перейдем к интересной части:
Стоимость этого дополнительного разделения - это, конечно, дополнительная работа. Преимущества - улучшенная ремонтопригодность и гибкость.
Транзакция script хороша, если у вас мало или нет бизнес-правил, вы просто хотите выполнить ввод данных и не имеете никаких этапов проверки, или вся проверка выполняется в базе данных.
Активная запись добавляет к этому некоторую гибкость. Поскольку вы отключаете свой пользовательский интерфейс, вы можете, например, повторно использовать слой под ним между приложениями, вы можете легко добавить к бизнес-объектам некоторые бизнес-правила и логику проверки. Но поскольку они по-прежнему тесно связаны с изменениями базы данных в datamodel, это может быть очень дорого.
Вы используете модель домена, когда хотите отделить свою бизнес-логику от базы данных. Это позволяет вам легче справляться с изменяющимися требованиями. Domain Driven Design - это метод оптимального использования этой дополнительной гибкости для реализации сложных решений без привязки к реализации базы данных.

Множество инструментов облегчает управление данными. В пространстве Microsoft очень легко визуально создавать веб-сайты, где весь код живет прямо за веб-страницей. Это типичное решение для транзакций script, и это отлично подходит для простого создания простых приложений. Ruby on rails имеет инструменты, облегчающие работу с активными объектами записи. Это может быть причиной перехода данных, когда вам нужно разрабатывать более простые решения. Для приложений, где поведение более важно, чем данные, и трудно определить все поведение переднего DDD - это путь.

Ответ 2

Я задал аналогичный вопрос: Где мне приступить к проектированию при использовании сопоставления O/R? Объекты или таблицы базы данных?

Из полученных ответов я бы сказал: если у вас нет конкретной причины использовать разработку, основанную на базе данных, используйте разработку, основанную на доменах.

Ответ 3

Подумайте об этом таким образом.

Проблемная область существует навсегда. Определения вашего класса будут отражать вечные свойства домена.

Реляционная база данных сегодня является предпочтительным механизмом сохранения. В какой-то момент мы перейдем от этого к чему-то "более новому", "лучше", "другому". Дизайн базы данных - это всего лишь одна реализация; он отражает архитектуру решения больше, чем проблемную область.

Следовательно, это домен сначала. Классы отражают проблемную область и универсальные истины. Реляционная база данных и ORM - вторая и третья. Наконец, заполните другие вещи вокруг модели.

Ответ 4

Как побочная заметка к почте mendelt, я чувствую, что есть четвертый шаблон: один, который является многоуровневым, отделяет логику бизнес от сохранения и хранения, но не использует никаких "сущностей" или "бизнес-объектов". Половина пути, если хотите, между транзакцией/действием script и DDD.

В целом ряде систем, над которыми я работал, уровень сохранения (репозитории) напрямую использовал SqlClient и возвращал наборы данных для вызывающей службы. Услуги выполняли решения и скомпилировали представления, которые были отправлены пользователю через контроллер. Вы считаете сервисный уровень бизнес-моделью, и вы были бы правы, но это не было "доменной" моделью в смысле DDD. Тем не менее, вся бизнес-логика возникла в этом слое, периоде. У каждого слоя была работа. Представленные данные представлений, определяемые контроллером представления, хранилище с сохраненным уровнем хранения и службы, работающие между контроллерами и настойчивость.

Дело в том, что DDD - это подход к определению бизнеса через Ul, тесты и код. Речь идет не о объектах, объектах ценности и агрегатах. Эти вещи являются лишь побочными продуктами подхода пуритов ООП к DDD.

Просто больше мыслей для вашего рассмотрения.

Ответ 5

Для сложных бизнес-моделей я предпочитаю сочетание ActiveRecord и DDD. Объекты домена знают, как сохранять себя, а действия данных выполняются в отношении репозитория (nHibernate может выступать в роли общего репозитория, если вы рассматриваете репозиторий как нечто, предоставляющее данные модели как коллекции). Бизнес-логика находится в объектах домена, и даже некоторые инкапсуляции типов значений могут быть выполнены, хотя и только при наличии необходимости в бизнесе. Некоторые реализации DDD способствуют удалению всех публичных сеттеров и только изменению объектов посредством методов. Я не являюсь поклонником этой реализации, если у нас нет очень хорошей деловой потребности.

Мне кажется, что эта реализация дает вам простоту использования ActiveRecord и инкапсуляции бизнес-логики DDD.

Ответ 6

Развитие домена Driven Development - это, безусловно, путь. это имеет больше смысла и добавляет гибкости.