Где должна лежать бизнес-логика в мнгоуровневом приложении

Узнай как страхи, стереотипы, замшелые убеждения, и подобные"глюки" мешают человеку быть богатым, и самое главное - как можно убрать их из своего ума навсегда. Это нечто, что тебе никогда не расскажет ни один бизнес-консультант (просто потому, что сам не знает). Кликни здесь, чтобы получить бесплатную книгу.

Поместите достаточную бизнес-логику в базу данных, чтобы убедиться, что данные согласованы и правильны. Но не бойтесь дублировать часть этой логики на другом уровне, чтобы улучшить работу пользователя. Интегрированные средства отладки и более мощные обычно упрощают сохранение кода среднего уровня, чем тот же код в хранимой процедуре. Однако, когда вы приходите к отчетности и интеллектуальному анализу данных, поиск хранимых процедур часто может быть лучшим выбором. Но это может быть не то, что в большинстве случаев считают классической бизнес-логикой. Обычно даже простые случаи со временем усложняются. Вот причины, по которым я не ставил бизнес-логику в базе данных: Включение бизнес-логики в базу данных тесно связано с технической реализацией базы данных. Изменение таблицы приведет к тому, что вы снова измените много хранимых процедур, вызвав много дополнительных ошибок и дополнительного тестирования.

Должен ли уровень доступа к данным содержать бизнес-логику?

Добавлено дата 6, 0 Проработав долгое время с различными компаниями и их системами данных, со временем я начал замечать явный прогресс в их решениях анализа и отчетности. В первое время запросы выполнялись непосредственно к базам данных оперативной обработки транзакций , однако этот подход конфликтовал с повседневным использованием баз и обычно в значительной мере ограничивал доступ ввиду ограничений безопасности.

Часто следующим этапом было ежедневное создание копии базы данных . Структуры данных оптимизированы для разовых, атомарных транзакций, в то время как системы оптимизированы для работы с крупными массивами данных.

В классе DAO описывается вся бизнес логика работы с базой данных: поиск, создание и удаление записей. Все классы DAO всегда реализуют паттерн.

Вместо должно быть . Или я чего-то не понимаю? Но обычно под подразумевают именно часть приложения, в которой логика предметной области изложена в виде кода. А не просто какие-то абстрактные правила, которые существуют в голове у экспертов в предметной области. Допустим, вы программируете софт для приюта животных и для детского приюта. По бизнес-логике приюта для животных, предположим, котика, которого за неделю не забрали новые хозяева, надо усыпить.

Не профукай единственный шанс выяснить, что реально важно для финансового успеха. Кликни здесь, чтобы прочитать.

А до этого его надо кормить, поить и спать укладывать. По бизнес-логике детского приюта - ребенка надо кормить, поить и спать укладывать.

Кого ни спроси, все обязательно борются за качество. Что характерно, многие действительно борются, применяя тестирование продукта, инспекции кода, детальное документирование процесса разработки и т. Но это следовало бы назвать обеспечением качества постфактум, закономерно приводящим к необходимости борьбы с дефектами.

Работаю над ПО для доступа к различным БД (). Основная идея: отразить бизнес-логику в схеме данных и хранимых процедурах.

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

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

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

Бизнес-логика в базе данных против кода?

Написано : Если делать с расчет на расширяемость, то в объекте в котором собрано все состояние игрока должно быть поле класса , который отвечает за состояние прогресса науки. У него должен быть метод типа , который принимает возможно, строковое или технологии и возвращает булево значение доступна или нет. Только сам корабль"знает" технологию ее , необходимую для его создания, поэтому проверка идет в конструкторе конкретного класса корабля.

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

С вынимает из клиентского запроса или имя класса корабля и ищет его в специальной таблице , где ему сопоставлена ссылка класс, который можно инстанциировать вызвать для него .

Автор доступно и детально поясняет понятия: транзакция, ограничения целостности базы данных, триггер базы данных, бизнес-логика. Материал.

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

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

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

Заключение

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

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

Нужно ли хранить логику в хранимых процедурах базы данных 3. В одной если (о ужас) в хранимку попадает бизнес-логика, то такой код лишается.

Есть разные мнения насчёт вопроса стоит ли хранить БЛ в базе. Приведу пару цитат Тома Кайта: , , , Том Кайт. Прежде чем начать, хотелось бы объяснить вам мой подход к разработке. Я предпочитаю решать большинство проблем на уровне СУБД. Если что-то можно сделать в СУБД, я так и сделаю. В то же время в среде -разработчиков приходится слышать мнения, что БЛ в БД это чуть ли не антипаттерн. Но я не буду останавливаться на вопросе стоит ли реализовывать БЛ в БД. Пусть каждый решает сам.

Тем, кто хочет посмотреть, что у меня получилось в свете не столь обширного по сравнению с инструментария , добро пожаловать под кат. Всё дальнейшее описание будет справедливо для 5.

Подписаться на ленту

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

Возрастный вопрос. Где вы должны поместить свою бизнес-логику в базу данных в виде хранимых процедур (или пакетов) или в прикладном / среднем .

Кроме того на том же хабре есть переводы статей о переложении этого подхода на : Но все это разбивается о реальную жизнь, транзакции, переиспользование кода, протомонолит и прочие проблемы. Но обо всём по порядку. Всё описанное является сугубо моим мнением, основанным на некотором количестве боли, испытываемой в работе, особенно с циклическими импортами. При использовании этого подхода придётся писать очень много шаблонного кода, который особо даже и не сгенерируешь. ; Что же такое чистая архитектура?

Роберт Мартин предлагает ввести 4 круга абстракций, что иллюстрирует следующая картинка: Оригинальная архитектура, предложенная Р. Мартином Здесь сущности это непосредственно объекты системы, причём это те объекты и та их логика, которая не специфична для данного сервиса. Это базовые бизнес-объекты, логика которых совершенно никак не зависит от используемой базы данных или того в каком виде они попали к нам от клиентов. Сценарии в оригинале это самая интересная часть.

Сервис Groupon: разбираем бизнес-логику и делаем структуру бд на Django.