Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Разработка информационных систем Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные  [new]
rigorMortis
Member

Откуда:
Сообщений: 283
Привет
Есть стандартный подход при проектировании приложений при котором между представлением данных и самими данными лежат два уровня - уровень доступа к данным, где происходит непосредственное обращение к БД, и бизнес-уровень, где эти данные как-то обрабатываются.
Предположим, что нажатие какой-то кнопки на форме приводит к нескольким вызовам БД-процедур. Поскольку вызываются они гарантировано пачкой то есть смысл (настоятельно) все процедуры выполнять в рамках одного открытого БД-подключения. В этом и вопрос - где открывать подключение? Если делать это на уровне данных то там должна быть отдельная процедура, которая только устанавливает подключение и в рамках его выполняет набор процедур. Если при этом есть промежуточные расчёты то их придётся делать здесь же, а это уже вынос бизнес-уровня на уровень доступа к данным.

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

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

Есть ли какой-то рациональный подход для решения такой проблемы?
19 апр 17, 23:45    [20416865]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 22808
rigorMortis, какие такие ресурсы будут тратиться? Соединение будт открыто и отправлено в пул.
19 апр 17, 23:53    [20416878]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные  [new]
rigorMortis
Member

Откуда:
Сообщений: 283
skyANA, каждая процедура выполняется внутри блока using (на C#), при выходе из блока соединение будет закрыто.
20 апр 17, 00:59    [20416943]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 51466
Блог
rigorMortis
Есть ли какой-то рациональный подход для решения такой проблемы?

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

Если при нажатии на кнопку нужно выполнить несколько хранимых процедур - в Оракле лично я выполню их в анонимном блоке. За одно обращение к серверу. В MSSQL, насколько я понимаю, для той же цели можно использовать батчи. Уверен, и в других СУБД найдётся вменяемый способ действий. В крайнем случае, никто не мешает создать техническую хранимку, содержащую эти несколько вызовов, и вызывать её.
20 апр 17, 01:16    [20416956]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 22808
rigorMortis
skyANA, каждая процедура выполняется внутри блока using (на C#), при выходе из блока соединение будет закрыто.

Физически оно не будет закрыто, а возвращено в пул.
Читайте: https://msdn.microsoft.com/ru-ru/library/8xx3tyca(v=vs.110).aspx
20 апр 17, 04:02    [20416998]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные  [new]
Гхостик
Guest
> С другой стороны, если вызов процедур делать на бизнес-уровне то и БД-подключение надо разворачивать там, а это уже вынос уровня доступа к данным на бизнес-уровень.

Сделай абстракцию "транзакция" на бизнес-уровне, оборачивай в неё все действия, и передавай её на уровень данных. На уровне данных переводи транзакцию бизнес-уровня в транзакцию БД.
20 апр 17, 07:34    [20417073]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные  [new]
17-77
Member

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

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

можете глянуть UnitOfWork для примера или можете использовать ORM, так контекст уже сделан за вас и есть методы для вызова нативного sql или хранимки

подключение можно держать открытым в рамках запроса, пользовательской сессии, сессии приложения. по умолчанию лучше использовать в рамках запроса, другие способы только после аргументов, что они действительно нужны
20 апр 17, 10:29    [20417560]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные  [new]
rigor mortis
Member

Откуда:
Сообщений: 31
softwarer
rigorMortis
Есть ли какой-то рациональный подход для решения такой проблемы?

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

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


А если нужно одну и ту же процедуру выполнить несколько раз в цикле?
20 апр 17, 14:48    [20418975]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 51466
Блог
rigor mortis
А если нужно одну и ту же процедуру выполнить несколько раз в цикле?

А кто мешает написать в анонимном блоке цикл?

P.S. Хотя странное желание, если честно. Подозреваю, если копнуть - выяснится, что это ещё и процедура типа INSERT_ONE_ROW
20 апр 17, 15:17    [20419140]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные  [new]
rigor mortis
Member

Откуда:
Сообщений: 31
softwarer
rigor mortis
А если нужно одну и ту же процедуру выполнить несколько раз в цикле?

А кто мешает написать в анонимном блоке цикл?

А параметры как передать при каждой итерации?
20 апр 17, 16:02    [20419400]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 51466
Блог
rigor mortis
softwarer
А кто мешает написать в анонимном блоке цикл?

А параметры как передать при каждой итерации?

Специально предназначенным для этого способом, о котором можно прочитать в документации по СУБД. Ищите по словам типа bulk dml, array insert, array binding итп.

P.S. Вот говорил же, говорил же, что это будет INSERT_ONE_ROW + не_хочу_читать_доку :)
20 апр 17, 16:08    [20419434]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные  [new]
alex55555
Member

Откуда:
Сообщений: 306
rigorMortis
Поскольку вызываются они гарантировано пачкой то есть смысл (настоятельно) все процедуры выполнять в рамках одного открытого БД-подключения. В этом и вопрос - где открывать подключение?

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

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

Правда нужно признать, что со стороны разработчиков серверов приложений усилия по разъяснению сути своего творения рассматриваются примерно так же, как умники рассматривают сервер приложений. То есть миры не пересекаются. Ну да такова селява.
22 апр 17, 14:00    [20424867]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 30363
alex55555
То есть миры не пересекаются

))
Именно. Есть 3-х звенки и 2-х звенки.
В обоих делится на слои и оба варианта успешно работают.
22 апр 17, 14:43    [20424940]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 51466
Блог
alex55555
Вот все подобные вопросы давно и много раз решены и решение воплощено в системах под названием "сервер приложений".

Какой блестящий пример подхода "Чукча не читатель".
22 апр 17, 14:54    [20424954]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные  [new]
hVostt
Member

Откуда:
Сообщений: 11785
rigorMortis
Есть ли какой-то рациональный подход для решения такой проблемы?



Чёт не увидел никакой проблемы. Фантомные боли?

Стандартного подхода нет.
Общий совет: делай то, что тебе понятно и то, что по силам.
22 апр 17, 23:50    [20425713]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные  [new]
alex55555
Member

Откуда:
Сообщений: 306
Petro123
Есть 3-х звенки и 2-х звенки.
В обоих делится на слои и оба варианта успешно работают.

И арифмометры "Феликс" до сих пор кое где работают. И даже кто-то назовёт такую работу успешной.
23 апр 17, 15:11    [20426621]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 30363
alex55555
И даже кто-то назовёт такую работу успешной.

если эти кто-то 30% экспертов, то это Успешно.
24 апр 17, 09:54    [20427814]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные  [new]
alex55555
Member

Откуда:
Сообщений: 306
Petro123
если эти кто-то 30% экспертов, то это Успешно.

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

Общество потребителей умеет быстро изучить характеристики товара и понять, зачем эти характеристики нужны, но вот понять, а зачем им нужен сам товар атомы из нынешнего общества не способны. Ну ладно - чаще всего не способны, а то-ж все сразу обидятся, но вот увидев возможность попасть в категорию "исключение", все сразу с ухмылкой закивают, предполагая, что исключение здесь именно они. Но на самом деле мир сложен, а люди слабы.
24 апр 17, 13:30    [20428927]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 30363
alex55555,
мы уходим от конкретики в флейм
Странные мысли о 3-звенном приложении
24 апр 17, 13:34    [20428959]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные  [new]
alex55555
Member

Откуда:
Сообщений: 306
Petro123
мы уходим от конкретики в флейм

Да не, я не со зла :)
24 апр 17, 20:00    [20430688]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 22808
alex55555
Современные программисты в массе своей бессистемные самообразованцы. Подобные типы людей, безусловно, склонны считать себя экспертами во всём на свете, ведь смогли же они выучить бэйсик!

Современные... и Бейсик )))))
Надо же... Ну хотя бы PHP написали ))))
24 апр 17, 20:51    [20430825]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 30363
alex55555
Да не, я не со зла :)

да и я тоже).
Просто ваш спич походит на жалобы пенсонера что молодёжь счас не та пошла.
24 апр 17, 21:52    [20431009]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные  [new]
alex55555
Member

Откуда:
Сообщений: 306
Petro123
Просто ваш спич походит на жалобы пенсонера что молодёжь счас не та пошла.

А разве та? Вон постом выше меня упрекают, что даже про бэйсик-то они на самом деле не знают :)
25 апр 17, 17:40    [20433436]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 22808
alex55555
Petro123
Просто ваш спич походит на жалобы пенсонера что молодёжь счас не та пошла.

А разве та? Вон постом выше меня упрекают, что даже про бэйсик-то они на самом деле не знают :)

А нарисуйте-ка логическую сентенцию того, что из поста выше Вы вывели :)
25 апр 17, 22:44    [20434166]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные  [new]
alex55555
Member

Откуда:
Сообщений: 306
skyANA
А нарисуйте-ка логическую сентенцию того, что из поста выше Вы вывели :)

Ваши определения дают безграничный простор для моих сентенций. Поэтому оставляю вам возможность выбора любой сентенции по на ваш вкус :)
26 апр 17, 16:14    [20436744]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Разработка информационных систем Ответить