Гость
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные / 25 сообщений из 27, страница 1 из 2
19.04.2017, 23:45
    #39441267
rigorMortis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные
Привет
Есть стандартный подход при проектировании приложений при котором между представлением данных и самими данными лежат два уровня - уровень доступа к данным, где происходит непосредственное обращение к БД, и бизнес-уровень, где эти данные как-то обрабатываются.
Предположим, что нажатие какой-то кнопки на форме приводит к нескольким вызовам БД-процедур. Поскольку вызываются они гарантировано пачкой то есть смысл (настоятельно) все процедуры выполнять в рамках одного открытого БД-подключения. В этом и вопрос - где открывать подключение? Если делать это на уровне данных то там должна быть отдельная процедура, которая только устанавливает подключение и в рамках его выполняет набор процедур. Если при этом есть промежуточные расчёты то их придётся делать здесь же, а это уже вынос бизнес-уровня на уровень доступа к данным.

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

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

Есть ли какой-то рациональный подход для решения такой проблемы?
...
Рейтинг: 0 / 0
19.04.2017, 23:53
    #39441269
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные
rigorMortis, какие такие ресурсы будут тратиться? Соединение будт открыто и отправлено в пул.
...
Рейтинг: 0 / 0
20.04.2017, 00:59
    #39441278
rigorMortis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные
skyANA, каждая процедура выполняется внутри блока using (на C#), при выходе из блока соединение будет закрыто.
...
Рейтинг: 0 / 0
20.04.2017, 01:16
    #39441282
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные
rigorMortisЕсть ли какой-то рациональный подход для решения такой проблемы?
Конечно - не устраивать подобного цирка. Вызов пачки процедур одна за другой плох хотя бы тем, что для каждой по отдельности выполняется полный набор сетевых действий и ожиданий, это примерно то же самое, что после каждого урока в школе отправляться домой и тут же назад, на следующий. Ещё смешнее, если между этими процедурами должны передаваться данные, скажем, какой-нибудь гигабайтный lob, который будет ездить туда-сюда-туда-сюда-туда-сюда.

Если при нажатии на кнопку нужно выполнить несколько хранимых процедур - в Оракле лично я выполню их в анонимном блоке. За одно обращение к серверу. В MSSQL, насколько я понимаю, для той же цели можно использовать батчи. Уверен, и в других СУБД найдётся вменяемый способ действий. В крайнем случае, никто не мешает создать техническую хранимку, содержащую эти несколько вызовов, и вызывать её.
...
Рейтинг: 0 / 0
20.04.2017, 04:02
    #39441296
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные
rigorMortisskyANA, каждая процедура выполняется внутри блока using (на C#), при выходе из блока соединение будет закрыто.
Физически оно не будет закрыто, а возвращено в пул.
Читайте: https://msdn.microsoft.com/ru-ru/library/8xx3tyca(v=vs.110).aspx
...
Рейтинг: 0 / 0
20.04.2017, 07:34
    #39441323
Гхостик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные
> С другой стороны, если вызов процедур делать на бизнес-уровне то и БД-подключение надо разворачивать там, а это уже вынос уровня доступа к данным на бизнес-уровень.

Сделай абстракцию "транзакция" на бизнес-уровне, оборачивай в неё все действия, и передавай её на уровень данных. На уровне данных переводи транзакцию бизнес-уровня в транзакцию БД.
...
Рейтинг: 0 / 0
20.04.2017, 10:29
    #39441406
17-77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные
rigorMortis,
разделение по уровням - не означает, что нижний уровень нельзя использовать на верхнем.
делаете контекст: интерфейс, его использовать в бизнес слое + реализация в слое доступа к данным

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

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

подключение можно держать открытым в рамках запроса, пользовательской сессии, сессии приложения. по умолчанию лучше использовать в рамках запроса, другие способы только после аргументов, что они действительно нужны
...
Рейтинг: 0 / 0
20.04.2017, 14:48
    #39441651
rigor mortis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные
softwarerrigorMortisЕсть ли какой-то рациональный подход для решения такой проблемы?
Конечно - не устраивать подобного цирка. Вызов пачки процедур одна за другой плох хотя бы тем, что для каждой по отдельности выполняется полный набор сетевых действий и ожиданий, это примерно то же самое, что после каждого урока в школе отправляться домой и тут же назад, на следующий. Ещё смешнее, если между этими процедурами должны передаваться данные, скажем, какой-нибудь гигабайтный lob, который будет ездить туда-сюда-туда-сюда-туда-сюда.

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

А если нужно одну и ту же процедуру выполнить несколько раз в цикле?
...
Рейтинг: 0 / 0
20.04.2017, 15:17
    #39441672
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные
rigor mortisА если нужно одну и ту же процедуру выполнить несколько раз в цикле?
А кто мешает написать в анонимном блоке цикл?

P.S. Хотя странное желание, если честно. Подозреваю, если копнуть - выяснится, что это ещё и процедура типа INSERT_ONE_ROW
...
Рейтинг: 0 / 0
20.04.2017, 16:02
    #39441721
rigor mortis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные
softwarerrigor mortisА если нужно одну и ту же процедуру выполнить несколько раз в цикле?
А кто мешает написать в анонимном блоке цикл?

А параметры как передать при каждой итерации?
...
Рейтинг: 0 / 0
20.04.2017, 16:08
    #39441722
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные
rigor mortissoftwarerА кто мешает написать в анонимном блоке цикл?

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

P.S. Вот говорил же, говорил же, что это будет INSERT_ONE_ROW + не_хочу_читать_доку :)
...
Рейтинг: 0 / 0
22.04.2017, 14:00
    #39442673
alex55555
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные
rigorMortisПоскольку вызываются они гарантировано пачкой то есть смысл (настоятельно) все процедуры выполнять в рамках одного открытого БД-подключения. В этом и вопрос - где открывать подключение?
Вот все подобные вопросы давно и много раз решены и решение воплощено в системах под названием "сервер приложений". Потому что каждый умник рано или поздно начинает понимать - одинаковые алгоритмы нужно не писать миллион раз повторно, а написать один раз и потом просто дёргать. Вот так и получился сервер приложений.

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

Правда нужно признать, что со стороны разработчиков серверов приложений усилия по разъяснению сути своего творения рассматриваются примерно так же, как умники рассматривают сервер приложений. То есть миры не пересекаются. Ну да такова селява.
...
Рейтинг: 0 / 0
22.04.2017, 14:43
    #39442684
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные
alex55555То есть миры не пересекаются
))
Именно. Есть 3-х звенки и 2-х звенки.
В обоих делится на слои и оба варианта успешно работают.
...
Рейтинг: 0 / 0
22.04.2017, 14:54
    #39442688
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные
alex55555Вот все подобные вопросы давно и много раз решены и решение воплощено в системах под названием "сервер приложений".
Какой блестящий пример подхода "Чукча не читатель".
...
Рейтинг: 0 / 0
22.04.2017, 23:50
    #39442799
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные
rigorMortisЕсть ли какой-то рациональный подход для решения такой проблемы?


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

Стандартного подхода нет.
Общий совет: делай то, что тебе понятно и то, что по силам.
...
Рейтинг: 0 / 0
23.04.2017, 15:11
    #39442881
alex55555
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные
Petro123Есть 3-х звенки и 2-х звенки.
В обоих делится на слои и оба варианта успешно работают.
И арифмометры "Феликс" до сих пор кое где работают. И даже кто-то назовёт такую работу успешной.
...
Рейтинг: 0 / 0
24.04.2017, 09:54
    #39443069
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные
alex55555И даже кто-то назовёт такую работу успешной.
если эти кто-то 30% экспертов, то это Успешно.
...
Рейтинг: 0 / 0
24.04.2017, 13:30
    #39443257
alex55555
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные
Petro123если эти кто-то 30% экспертов, то это Успешно.
Современные программисты в массе своей бессистемные самообразованцы. Подобные типы людей, безусловно, склонны считать себя экспертами во всём на свете, ведь смогли же они выучить бэйсик! А раз на басике разумеют, значит всё остальное точно так же выучить способны. Но вот отличие между "способны" и "уже выучили" они чаще всего не понимают. Отсюда заявочки про "экспертизу" от почитавших популярные статьи про ассемблер. То есть люди путают потенциальную доступность знаний с реальным их наличием. А реальное наличие включает очень глубокую и качественную систематизацию. Но разве кто-то сегодня вспомнит хотя бы отрывки из курса "компиляторы"? А подавляющее большинство этот курс, естественно, даже не проходило.

Общество потребителей умеет быстро изучить характеристики товара и понять, зачем эти характеристики нужны, но вот понять, а зачем им нужен сам товар атомы из нынешнего общества не способны. Ну ладно - чаще всего не способны, а то-ж все сразу обидятся, но вот увидев возможность попасть в категорию "исключение", все сразу с ухмылкой закивают, предполагая, что исключение здесь именно они. Но на самом деле мир сложен, а люди слабы.
...
Рейтинг: 0 / 0
24.04.2017, 13:34
    #39443264
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные
alex55555,
мы уходим от конкретики в флейм
Странные мысли о 3-звенном приложении
...
Рейтинг: 0 / 0
24.04.2017, 20:00
    #39443612
alex55555
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные
Petro123мы уходим от конкретики в флейм

Да не, я не со зла :)
...
Рейтинг: 0 / 0
24.04.2017, 20:51
    #39443646
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные
alex55555Современные программисты в массе своей бессистемные самообразованцы. Подобные типы людей, безусловно, склонны считать себя экспертами во всём на свете, ведь смогли же они выучить бэйсик!
Современные... и Бейсик )))))
Надо же... Ну хотя бы PHP написали ))))
...
Рейтинг: 0 / 0
24.04.2017, 21:52
    #39443676
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные
alex55555Да не, я не со зла :)
да и я тоже).
Просто ваш спич походит на жалобы пенсонера что молодёжь счас не та пошла.
...
Рейтинг: 0 / 0
25.04.2017, 17:40
    #39444222
alex55555
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные
Petro123Просто ваш спич походит на жалобы пенсонера что молодёжь счас не та пошла.
А разве та? Вон постом выше меня упрекают, что даже про бэйсик-то они на самом деле не знают :)
...
Рейтинг: 0 / 0
25.04.2017, 22:44
    #39444324
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные
alex55555Petro123Просто ваш спич походит на жалобы пенсонера что молодёжь счас не та пошла.
А разве та? Вон постом выше меня упрекают, что даже про бэйсик-то они на самом деле не знают :)
А нарисуйте-ка логическую сентенцию того, что из поста выше Вы вывели :)
...
Рейтинг: 0 / 0
26.04.2017, 16:14
    #39444885
alex55555
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные
skyANAА нарисуйте-ка логическую сентенцию того, что из поста выше Вы вывели :)
Ваши определения дают безграничный простор для моих сентенций. Поэтому оставляю вам возможность выбора любой сентенции по на ваш вкус :)
...
Рейтинг: 0 / 0
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные / 25 сообщений из 27, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]