Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
19.04.2017, 23:45
|
|||
---|---|---|---|
|
|||
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные |
|||
#18+
Привет Есть стандартный подход при проектировании приложений при котором между представлением данных и самими данными лежат два уровня - уровень доступа к данным, где происходит непосредственное обращение к БД, и бизнес-уровень, где эти данные как-то обрабатываются. Предположим, что нажатие какой-то кнопки на форме приводит к нескольким вызовам БД-процедур. Поскольку вызываются они гарантировано пачкой то есть смысл (настоятельно) все процедуры выполнять в рамках одного открытого БД-подключения. В этом и вопрос - где открывать подключение? Если делать это на уровне данных то там должна быть отдельная процедура, которая только устанавливает подключение и в рамках его выполняет набор процедур. Если при этом есть промежуточные расчёты то их придётся делать здесь же, а это уже вынос бизнес-уровня на уровень доступа к данным. С другой стороны, если вызов процедур делать на бизнес-уровне то и БД-подключение надо разворачивать там, а это уже вынос уровня доступа к данным на бизнес-уровень. Если же выполнять каждую процедуру в рамках отдельного подключения - то есть каждая будет открывать и закрывать БД-подключение то это трата ресурсов. Есть ли какой-то рациональный подход для решения такой проблемы? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
19.04.2017, 23:53
|
|||
---|---|---|---|
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные |
|||
#18+
rigorMortis, какие такие ресурсы будут тратиться? Соединение будт открыто и отправлено в пул. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
20.04.2017, 00:59
|
|||
---|---|---|---|
|
|||
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные |
|||
#18+
skyANA, каждая процедура выполняется внутри блока using (на C#), при выходе из блока соединение будет закрыто. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
20.04.2017, 01:16
|
|||
---|---|---|---|
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные |
|||
#18+
rigorMortisЕсть ли какой-то рациональный подход для решения такой проблемы? Конечно - не устраивать подобного цирка. Вызов пачки процедур одна за другой плох хотя бы тем, что для каждой по отдельности выполняется полный набор сетевых действий и ожиданий, это примерно то же самое, что после каждого урока в школе отправляться домой и тут же назад, на следующий. Ещё смешнее, если между этими процедурами должны передаваться данные, скажем, какой-нибудь гигабайтный lob, который будет ездить туда-сюда-туда-сюда-туда-сюда. Если при нажатии на кнопку нужно выполнить несколько хранимых процедур - в Оракле лично я выполню их в анонимном блоке. За одно обращение к серверу. В MSSQL, насколько я понимаю, для той же цели можно использовать батчи. Уверен, и в других СУБД найдётся вменяемый способ действий. В крайнем случае, никто не мешает создать техническую хранимку, содержащую эти несколько вызовов, и вызывать её. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
20.04.2017, 04:02
|
|||
---|---|---|---|
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные |
|||
#18+
rigorMortisskyANA, каждая процедура выполняется внутри блока using (на C#), при выходе из блока соединение будет закрыто. Физически оно не будет закрыто, а возвращено в пул. Читайте: https://msdn.microsoft.com/ru-ru/library/8xx3tyca(v=vs.110).aspx ... |
|||
:
Нравится:
Не нравится:
|
|||
|
20.04.2017, 07:34
|
|||
---|---|---|---|
|
|||
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные |
|||
#18+
> С другой стороны, если вызов процедур делать на бизнес-уровне то и БД-подключение надо разворачивать там, а это уже вынос уровня доступа к данным на бизнес-уровень. Сделай абстракцию "транзакция" на бизнес-уровне, оборачивай в неё все действия, и передавай её на уровень данных. На уровне данных переводи транзакцию бизнес-уровня в транзакцию БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
20.04.2017, 10:29
|
|||
---|---|---|---|
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные |
|||
#18+
rigorMortis, разделение по уровням - не означает, что нижний уровень нельзя использовать на верхнем. делаете контекст: интерфейс, его использовать в бизнес слое + реализация в слое доступа к данным в контексте будет потенциальное подключение, транзакции и единая точка входа, чтобы выполнить sql запрос/команду/хранимку. там же можно управлять подключением - когда его открыть, когда закрыть и транзакциями можете глянуть UnitOfWork для примера или можете использовать ORM, так контекст уже сделан за вас и есть методы для вызова нативного sql или хранимки подключение можно держать открытым в рамках запроса, пользовательской сессии, сессии приложения. по умолчанию лучше использовать в рамках запроса, другие способы только после аргументов, что они действительно нужны ... |
|||
:
Нравится:
Не нравится:
|
|||
|
20.04.2017, 14:48
|
|||
---|---|---|---|
|
|||
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные |
|||
#18+
softwarerrigorMortisЕсть ли какой-то рациональный подход для решения такой проблемы? Конечно - не устраивать подобного цирка. Вызов пачки процедур одна за другой плох хотя бы тем, что для каждой по отдельности выполняется полный набор сетевых действий и ожиданий, это примерно то же самое, что после каждого урока в школе отправляться домой и тут же назад, на следующий. Ещё смешнее, если между этими процедурами должны передаваться данные, скажем, какой-нибудь гигабайтный lob, который будет ездить туда-сюда-туда-сюда-туда-сюда. Если при нажатии на кнопку нужно выполнить несколько хранимых процедур - в Оракле лично я выполню их в анонимном блоке. За одно обращение к серверу. В MSSQL, насколько я понимаю, для той же цели можно использовать батчи. Уверен, и в других СУБД найдётся вменяемый способ действий. В крайнем случае, никто не мешает создать техническую хранимку, содержащую эти несколько вызовов, и вызывать её. А если нужно одну и ту же процедуру выполнить несколько раз в цикле? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
20.04.2017, 15:17
|
|||
---|---|---|---|
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные |
|||
#18+
rigor mortisА если нужно одну и ту же процедуру выполнить несколько раз в цикле? А кто мешает написать в анонимном блоке цикл? P.S. Хотя странное желание, если честно. Подозреваю, если копнуть - выяснится, что это ещё и процедура типа INSERT_ONE_ROW ... |
|||
:
Нравится:
Не нравится:
|
|||
|
20.04.2017, 16:02
|
|||
---|---|---|---|
|
|||
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные |
|||
#18+
softwarerrigor mortisА если нужно одну и ту же процедуру выполнить несколько раз в цикле? А кто мешает написать в анонимном блоке цикл? А параметры как передать при каждой итерации? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
20.04.2017, 16:08
|
|||
---|---|---|---|
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные |
|||
#18+
rigor mortissoftwarerА кто мешает написать в анонимном блоке цикл? А параметры как передать при каждой итерации? Специально предназначенным для этого способом, о котором можно прочитать в документации по СУБД. Ищите по словам типа bulk dml, array insert, array binding итп. P.S. Вот говорил же, говорил же, что это будет INSERT_ONE_ROW + не_хочу_читать_доку :) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
22.04.2017, 14:00
|
|||
---|---|---|---|
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные |
|||
#18+
rigorMortisПоскольку вызываются они гарантировано пачкой то есть смысл (настоятельно) все процедуры выполнять в рамках одного открытого БД-подключения. В этом и вопрос - где открывать подключение? Вот все подобные вопросы давно и много раз решены и решение воплощено в системах под названием "сервер приложений". Потому что каждый умник рано или поздно начинает понимать - одинаковые алгоритмы нужно не писать миллион раз повторно, а написать один раз и потом просто дёргать. Вот так и получился сервер приложений. Но пока начинающие умники осознают глубину своего падения - иногда могут пройти десятилетия. Правда нужно признать, что со стороны разработчиков серверов приложений усилия по разъяснению сути своего творения рассматриваются примерно так же, как умники рассматривают сервер приложений. То есть миры не пересекаются. Ну да такова селява. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
22.04.2017, 14:43
|
|||
---|---|---|---|
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные |
|||
#18+
alex55555То есть миры не пересекаются )) Именно. Есть 3-х звенки и 2-х звенки. В обоих делится на слои и оба варианта успешно работают. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
22.04.2017, 14:54
|
|||
---|---|---|---|
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные |
|||
#18+
alex55555Вот все подобные вопросы давно и много раз решены и решение воплощено в системах под названием "сервер приложений". Какой блестящий пример подхода "Чукча не читатель". ... |
|||
:
Нравится:
Не нравится:
|
|||
|
22.04.2017, 23:50
|
|||
---|---|---|---|
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные |
|||
#18+
rigorMortisЕсть ли какой-то рациональный подход для решения такой проблемы? Чёт не увидел никакой проблемы. Фантомные боли? Стандартного подхода нет. Общий совет: делай то, что тебе понятно и то, что по силам. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.04.2017, 15:11
|
|||
---|---|---|---|
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные |
|||
#18+
Petro123Есть 3-х звенки и 2-х звенки. В обоих делится на слои и оба варианта успешно работают. И арифмометры "Феликс" до сих пор кое где работают. И даже кто-то назовёт такую работу успешной. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.04.2017, 09:54
|
|||
---|---|---|---|
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные |
|||
#18+
alex55555И даже кто-то назовёт такую работу успешной. если эти кто-то 30% экспертов, то это Успешно. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.04.2017, 13:30
|
|||
---|---|---|---|
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные |
|||
#18+
Petro123если эти кто-то 30% экспертов, то это Успешно. Современные программисты в массе своей бессистемные самообразованцы. Подобные типы людей, безусловно, склонны считать себя экспертами во всём на свете, ведь смогли же они выучить бэйсик! А раз на басике разумеют, значит всё остальное точно так же выучить способны. Но вот отличие между "способны" и "уже выучили" они чаще всего не понимают. Отсюда заявочки про "экспертизу" от почитавших популярные статьи про ассемблер. То есть люди путают потенциальную доступность знаний с реальным их наличием. А реальное наличие включает очень глубокую и качественную систематизацию. Но разве кто-то сегодня вспомнит хотя бы отрывки из курса "компиляторы"? А подавляющее большинство этот курс, естественно, даже не проходило. Общество потребителей умеет быстро изучить характеристики товара и понять, зачем эти характеристики нужны, но вот понять, а зачем им нужен сам товар атомы из нынешнего общества не способны. Ну ладно - чаще всего не способны, а то-ж все сразу обидятся, но вот увидев возможность попасть в категорию "исключение", все сразу с ухмылкой закивают, предполагая, что исключение здесь именно они. Но на самом деле мир сложен, а люди слабы. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.04.2017, 13:34
|
|||
---|---|---|---|
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные |
|||
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.04.2017, 20:00
|
|||
---|---|---|---|
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные |
|||
#18+
Petro123мы уходим от конкретики в флейм Да не, я не со зла :) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.04.2017, 20:51
|
|||
---|---|---|---|
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные |
|||
#18+
alex55555Современные программисты в массе своей бессистемные самообразованцы. Подобные типы людей, безусловно, склонны считать себя экспертами во всём на свете, ведь смогли же они выучить бэйсик! Современные... и Бейсик ))))) Надо же... Ну хотя бы PHP написали )))) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.04.2017, 21:52
|
|||
---|---|---|---|
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные |
|||
#18+
alex55555Да не, я не со зла :) да и я тоже). Просто ваш спич походит на жалобы пенсонера что молодёжь счас не та пошла. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
25.04.2017, 17:40
|
|||
---|---|---|---|
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные |
|||
#18+
Petro123Просто ваш спич походит на жалобы пенсонера что молодёжь счас не та пошла. А разве та? Вон постом выше меня упрекают, что даже про бэйсик-то они на самом деле не знают :) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
25.04.2017, 22:44
|
|||
---|---|---|---|
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные |
|||
#18+
alex55555Petro123Просто ваш спич походит на жалобы пенсонера что молодёжь счас не та пошла. А разве та? Вон постом выше меня упрекают, что даже про бэйсик-то они на самом деле не знают :) А нарисуйте-ка логическую сентенцию того, что из поста выше Вы вывели :) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
26.04.2017, 16:14
|
|||
---|---|---|---|
Архитектура приложения представление - бизнес уровень - уровень доступа к данным - данные |
|||
#18+
skyANAА нарисуйте-ка логическую сентенцию того, что из поста выше Вы вывели :) Ваши определения дают безграничный простор для моих сентенций. Поэтому оставляю вам возможность выбора любой сентенции по на ваш вкус :) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=33&mobile=1&tid=1547294]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
others: | 284ms |
total: | 421ms |
0 / 0 |