Почему я не пишу логику на - 18 Августа Программирование 2 0 Совсем недавно я написал о задании для программиста, которое мне прислали, где нужно было найти натуральные числа на - читаем заметку здесь. Там было ещё два задания, которые я точно не помню, но смысл в том, что они легко решаемы, но нужно писать процедуру или какой-то другой код на стороне - . В той заметке я так же спросил, что говорит такое задание. Если переносить логику на базу данных, то на неё увеличивается нагрузка. Хранимые процедуры с курсорами, циклами и так далее обходятся серверу не дёшево, да и в любом случае, даже дешёвые операции лучше лишний раз не кидать на сервер. Базу данных очень тяжело масштабировать горизонтально. Можно наращивать мощность процессора, увеличивать размер оперативной памяти, но ставить два сервера одновременно не так уж и легко. Самый простой метод горизонтального масштабирования - сделать один сервер основным и добавить ещё сколько угодно серверов только для чтения и настроить репликацию.

Аргументы для/против бизнес-логики в хранимых процедурах

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

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

Встроенная функциональность и простота интеграции с базой данных (в которые отображаются на ваши хранимые процедуры (ПРИМЕЧАНИЕ: это.

16, Я не знаю насколько эта статья актуальна современным реалиям. Вполне возможно, что описываемое мною — просто ерунда и никто так не пишет, просто мне не повезло дважды. Но что-то слишком много туториалов по программированию именно в таком стиле. Строится оно примерно так: Делаем репозитории под сущности — это у нас типа ; Делаем сервисы, в которые выносим бизнес-логику — это у нас типа ; Пишем контроллеры, которые ничего не делают — это у нас типа .

Время идет, проект расширяется. Постепенно вы начнете сталкиваться с проблемами. Вот именно про эти три слоя внутри сервера я буду говорить.

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

Если же клиент взаимодействует через хранимые процедуры, то управление транзакциями осуществляется из таких процедур явно начинается и явно завершается в одной и той же процедуре. Это минимизирует время транзакции. Для нас это было одной из основных причин применения хранимых процедур.

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

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

Клиент обращается к серверу с командой запуска ХП, а сервер выполняет эту процедуру и регистрирует все изменения в БД. Сервер возвращает клиенту данные, релевантные его запросу. Трафик обмена информацией резко уменьшается.

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

, а от расширенных хранимых процедур в будущем планируется отказаться. Также процедуры на и С поддерживает . Пакет состоит из двух частей — спецификации англ. Таким образом позволяет отделить интерфейс программного кода от его реализации. Назначение и преимущества хранимых процедур [3] [ править править код ] Хранимые процедуры позволяют повысить производительность, расширяют возможности программирования и поддерживают функции безопасности данных.

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

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

Какие из этого последовали плохие, хорошие стороны. Стоит отметить, что Артем никогда не был настоящим программистом, хотя и писал довольно много кода. Скорее его можно назвать анти-менеджер и евангелист, и логист для бизнеса -решений. Поэтому в его докладе взгляд не только со стороны технического специалиста, но и менеджера. Для того, чтобы объяснить наш выбор, стоит объяснить специфику нашей компании. Если открыть сайт Проекта наши программисты уже смотрят, будет ли там эффект , мы будем очень похожи на - интернет-магазин, но мы не про интернет-магазин, мы 2 .

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

Бизнес-логика на стороне БД

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

Где должна лежать бизнес-логика в мнгоуровневом приложении Тут недавно обсуждали такое: Хранимые процедуры против.

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

Идеальные схемы хороши тем, что они просты. Вас спрашивают где бизнес слой?

Организация бизнес-логики

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

На сервере бизнес-логика реализована в виде хранимых процедур . часть бизнес-логики клиента изолирована от возможностей встроенного SQL.

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

Сервер БД — это программный компонент, обеспечивающий хранение больших объемов информации, ее обработку и представление ее пользователям в сетевом режиме. На компьютере-клиенте приложение-клиент формирует запрос к БД. Серверная СУБД обеспечивает интерпретацию запроса, его выполнение, формирование результата запроса и пересылку его по сети на клиентский компьютер. Клиентское приложение интерпретирует его необходимым образом и представляет пользователю.

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

Презентация: Информационные технологии

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

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

Необходим постоянный контроль за состоянием БД, отслеживание всех изменений и адекватная реакция на них:

Бизнес логика — хранимые процедуры и триггеры — разрабатывается на Java. Синхронизация данных со встроенным настраиваемым механизмом .

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

Автоматизированные отчеты об охвате . Если у вас тяжелые бизнес-правила, управляемые данными, вы можете утверждать, что они должны жить на уровне БД. Но то же самое можно сказать и о бизнес-правилах не управляемых данными или достаточно сложных, что является более естественным выбором. Если вы придерживаетесь всей бизнес-логики в БД, тогда они доступны только через БД. Что делать, если вы хотите, чтобы проверка выполнялась на уровне клиента или среднего уровня и сохранялась поездка туда и обратно в БД?

Что делать, если вы хотите кэшировать данные только для чтения в среднем уровне для производительности и выполнять бизнес-правила против кэшированных данных?

Двухуровневые модели

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

Хранимые процедуры и клиентское приложения могут писать разные . плюс тяжелую бизнес логику на pl/sql проще писать, т.к. можно.

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

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

Сложная балансировка нагрузки и многообещающее оборудование потребуются для чего-либо с приличным количеством трафика.

Пуленепробиваемый бэкенд на PostgreSQL