Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Зачем выносить работу с СУБД в отдельный слой?
|
|||
|---|---|---|---|
|
#18+
Всем привет! Может кто-нибудь объяснить мне неразумному, зачем везде твердится о необходимости создания отдельного слоя для работы кода ASP.NET с бизнес-логикой и СУБД? Нигде не смог найти разумного ответа на этот вопрос. Чаще всего видел фразы типа "А если программист ASP.NET выполняет запросы напрямую к СУБД из кода страницы - его сразу выгоняют с работы, т.к. это говорит о том, что он нифига не понимает в таких модных штуках, как n-звенные приложения" Искренне не понимаю - нафига? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2006, 11:16 |
|
||
|
Зачем выносить работу с СУБД в отдельный слой?
|
|||
|---|---|---|---|
|
#18+
Ну давайте подумаем. Мне с ходу на ум приходят такие причины: 1. повторное использование кода - к одной и той же сущности в БД может быть обращение с разных страниц, так зачем писать код повторно. 2. поддерживаемость кода - это следствие из пункта 1 - если вы нашли ошибку в DAL или BLL, то вы исправляете ее в одном месте, а не в дюжине, к примеру. Или вот еще пример: у вас поменялась БД, в случае n-tier архитектуры вам надо внести изменения только в один слой - DAL. BLL и UIL при этом останутся без изменений. 3. тестируемость кода и автоматизация тестирования - что для DAL, что для BLL написать Unit тесты можно, а вот для UIL - весьма затруднительно. ~~~~~~~~~~~~~~~~~ Please, rate my answers ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2006, 11:29 |
|
||
|
Зачем выносить работу с СУБД в отдельный слой?
|
|||
|---|---|---|---|
|
#18+
>1. повторное использование кода - к одной и той же сущности в БД может быть обращение с разных страниц, так зачем писать код повторно. Хранимые процедуры и пользовательские функции позволяют использовать повторное использование кода :). Да и объект DataSet никто не отменяет - выбрал данные и пользуйся. Хотя его использование применительно к ASP.NET не совсем удачно будет, ИМХО. Проще делать выборки по запросу, еще и всегда актуальные данные будут. Ну а выборки делать через хранимки/функции >2. поддерживаемость кода - это следствие из пункта 1 - если вы нашли ошибку в DAL или BLL, то вы исправляете ее в одном месте, а не в дюжине, к примеру. Или вот еще пример: у вас поменялась БД, в случае n-tier архитектуры вам надо внести изменения только в один слой - DAL. BLL и UIL при этом останутся без изменений. Нашел ошибку в хранимке - исправил - работает везде А гипотетическое "у вас поменялась БД" - забавный аргумент :) Я видел несколько систем, которые могли работать с целым спектром СУБД, т.к. используется n-tier. Выводы не утешительные по производительности. Например есть система управления электронным контентом - Documentum Работает с Oracle, MS SQL и еще кучей СУБД. Но для получения приемлемых результатов по производительности пришлось допиливать напильником базу, к примеру индексы создавать. А это следствие того, что "бизнес-логика отделена от хранилища" и промышленные СУБД используются чуть ли не как обычный файл-сервер, лучше бы тогда сразу в XML напрямую хранить данные... >3. тестируемость кода и автоматизация тестирования - что для DAL, что для BLL написать Unit тесты можно, а вот для UIL - весьма затруднительно. Никто не запрещает писать тесты (я бы даже сказал, что это необходимость, но до неё "дорасти" нужно) для хранимок. На уровне UIL только их вызов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2006, 11:52 |
|
||
|
Зачем выносить работу с СУБД в отдельный слой?
|
|||
|---|---|---|---|
|
#18+
И в догонку Я не против дополнительного слоя, но единственное место, где имеет смысл его делать - это WebServices для предоставления интерфейса к своему приложению для возможностей интеграции со сторонними приложениями. В рамках же одного приложения - не понимаю зачем... Следует использовать всё по назначению СУБД для работы с данными и хранения бизнес-логики приложения ASP.NET для создания интерфейса пользователя и работы с СУБД через хранимки ИМХО Еще забавно видеть, когда про код для работы n-tier, который раз в пять больше аналогичного, но с использованием нормального клиент-серверного подхода, говорят, что он более прозрачен и понятен. Насколько я могу делать выводы, исходя из просмотра форумов, единственный аргумент в пользу n-tier и программирования бизнес-логики на ООП-языках является отсутствие желания учить T-SQL или PL\SQL... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2006, 12:16 |
|
||
|
Зачем выносить работу с СУБД в отдельный слой?
|
|||
|---|---|---|---|
|
#18+
А по-моему в n-tier никто использование хранимых процедур не отменял. Только они вызываются из DAL, а не напрямую из Codebehind, как Вы предлагаете. Чтение кода многослойного приложения гораздо проще, чем однослойного. Там все аккуратно, структурировано, работа с Business Entities(как это реализовывается в однослойном?)... А в однолойном, пардон, я предполагаю, что черт ногу сломит. Также такой подход к архитектуре приложения необходим на больших проектах, где пишет человек 20 - кто-то разрабатывает UI, кто-то BLL, DAL, кто-то пишет те самые хранимые процедуры... DAL создается для взаимодействия BE и БД, если можно так выразится. Также разработку n-tier приложений гораздо проще контроллировать. По поводу смены базы не вижу проблемы: например Ваш проект работает с MS SQL, но Вас попросили перейти на MySQL - вы переписываете просто DAL, а BLL никак не меняется - он работает с BE, а не напрямую с БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2006, 20:05 |
|
||
|
Зачем выносить работу с СУБД в отдельный слой?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2006, 20:06 |
|
||
|
Зачем выносить работу с СУБД в отдельный слой?
|
|||
|---|---|---|---|
|
#18+
Ну например для типизации сущностей без использования тормознутых датасетов. Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2006, 20:50 |
|
||
|
Зачем выносить работу с СУБД в отдельный слой?
|
|||
|---|---|---|---|
|
#18+
>Ну например для типизации сущностей без использования тормознутых датасетов. Насколько я понимаю, вышесказанное относится к программированию бизнес-логики не на уровне СУБД? >Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий. Именно поэтому я и попросил рассказать, какие такие задачи требуют появления дополнительного слоя. Если быть более точным - то какие элементы бизнес-логики требуется программировать не на T-SQL или PL\SQL? Т.е. пример, когда бизнес-логику требуется вынести за рамки СУБД. И вопрос к xopap: Совершенно не верится в следующий тезис: "...разработку n-tier приложений гораздо проще контроллировать...". Нельзя ли привести пример, который бы показывал, что больший объем проще контролировать, чем меньший? И еще вопрос по поводу инструментальных средств, позволяющих визуально системному аналитику моделировать многоуровневую модель. Для варианта клиент-сервер это совсем не вопрос. Все вопросы относятся применительно к разработке корпоративных систем на предприятиях, которые уже давно определились с выбором СУБД , выбрав для себя в качестве приоритетной обного из трех лидеров... Т.е. когда не имеет смысла фраза "смена СУБД на другую" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2006, 07:38 |
|
||
|
Зачем выносить работу с СУБД в отдельный слой?
|
|||
|---|---|---|---|
|
#18+
На самом деле "железных" причин использования DAL нету. Разве что "апатамучта!", "патамучта так вумных книжках пишут" и "патамучта эта крута", "патамучта так в МС говорят". Например, в SQL2005 всилу продвинутости новых изменений в T-SQL и возможности писать код ХП на дотнети "уровень бизнес-логики" легко может быть реальзован в самом сервере. Пресловутое "отделение данных от логики" (также как и "отделение логики от пользовательсого интерфейса") - аргумент слабый и, по большей части, чисто маркетинговый. Тут просто вопрос личных пристрастий. И с DAL хорошо, и без него неплохо. Это как с "прелестями" disconnected-режима в ADO.NET. Все "прелести" разлетаются в пух после немного углубленного анализа - соединения всё равно создаются, всё равно держаться сервером, всё равно им же закрываются. Только добавляются проблемы с самим пулом соединений. Но "эта крута". How can men die better than facing fearful odds, For the ashes of their fathers and the temples of their gods? | Мой Brainbench | BookReader 1.1 | Wallpaper Cycler | ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2006, 08:25 |
|
||
|
Зачем выносить работу с СУБД в отдельный слой?
|
|||
|---|---|---|---|
|
#18+
Хммм... Например в компании, где работаю, написал прогу. Есть Win клиент, есть ASP.NET клиент... а вот модуль работы с базой един для обоих клиентов... Хорошо там, где нас нет. Все там будем! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2006, 08:43 |
|
||
|
Зачем выносить работу с СУБД в отдельный слой?
|
|||
|---|---|---|---|
|
#18+
Вопрос о том нужун DAL или нет - это вопрос проектирования системы, на мой взгляд. Постараюсь объяснить почему. В настоящее время имеется два подхода к проектированию приложений баз данных: 1. Классический, когда сначала выявляются сущности и связи базы данных, ограничения, которые на них должны быть наложены и т.д. При этом подходе вся бизнес-логика получается на этапе проектирования данных и реализуется там же собссно. В этом случае DAL в общем-то не нужен. И именно под такой подход заточены DataSet'ы в .Net. 2. Объектно-ориентированное проектирование. Здесь сначала выявляются объекты программы и взаимодействие между ними и поэтому вся бизнес-логика, как правило, накладывается на объекты программы. База данных в этом случае - это просто место постоянного хранения объектов и не более. Никакой дополнительной функции (как при первом подходе, например, проверка ограничений на значения столбцов типа вторичные ключи) она не несет, вся ответственность лежит на объектах программы. Вот здесь удобнее выделить DAL, чтобы разделить бизнес-логику приложения и методы работы с базой данных. Так что, если Вы используете классический подход к проектированию Вашего приложения (что скорее всего и есть, ну уж очччень популярен данный подход) - забейте на DAL - Вы без него прекрасно обойдетесь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2006, 09:01 |
|
||
|
Зачем выносить работу с СУБД в отдельный слой?
|
|||
|---|---|---|---|
|
#18+
Всем привет! Может кто-нибудь объяснить мне неразумному, зачем везде твердится о необходимости создания отдельного слоя для работы кода ASP.NET с бизнес-логикой и СУБД? Нигде не смог найти разумного ответа на этот вопрос. Чаще всего видел фразы типа "А если программист ASP.NET выполняет запросы напрямую к СУБД из кода страницы - его сразу выгоняют с работы, т.к. это говорит о том, что он нифига не понимает в таких модных штуках, как n-звенные приложения" Искренне не понимаю - нафига? А я как раз пишу лекцию про ObjectDataSource, и меня этот вопрос тоже очень интересует. __________________________________ Я ни от кого, ни от чего не завишу. Встань, делай как я, ни от кого не завись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2006, 09:08 |
|
||
|
Зачем выносить работу с СУБД в отдельный слой?
|
|||
|---|---|---|---|
|
#18+
Всем привет! Может кто-нибудь объяснить мне неразумному, зачем везде твердится о необходимости создания отдельного слоя для работы кода ASP.NET с бизнес-логикой и СУБД? Нигде не смог найти разумного ответа на этот вопрос. Чаще всего видел фразы типа "А если программист ASP.NET выполняет запросы напрямую к СУБД из кода страницы - его сразу выгоняют с работы, т.к. это говорит о том, что он нифига не понимает в таких модных штуках, как n-звенные приложения" Искренне не понимаю - нафига? А я как раз пишу лекцию про ObjectDataSource, и меня этот вопрос тоже очень интересует. __________________________________ Я ни от кого, ни от чего не завишу. Встань, делай как я, ни от кого не завись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2006, 09:14 |
|
||
|
Зачем выносить работу с СУБД в отдельный слой?
|
|||
|---|---|---|---|
|
#18+
Я сделал для себя вывод: Рано или поздно, но при использовании объектно-ориентированного подхода к моделированию информационных систем, встанет вопрос производительности В итоге проект будет переведен на использование возможностей конкретной СУБД Таким образом, многоуровневую архитектуру можно расценивать, как дорогое пилотное моделирование промышленого приложения. При этом на этапе пилотного моделирования не стоит заморачиваться с выбором СУБД, а хранить данные в XML-файлах. Забавно... Но, если такие занятные штуки СУБД, как транзакции, индексы и иже с ними вас не интересуют, то можно оставить приложение и в такой реализации :) В конце концов файл-серверная архитектура живет и поныне :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2006, 09:37 |
|
||
|
Зачем выносить работу с СУБД в отдельный слой?
|
|||
|---|---|---|---|
|
#18+
когда не хватало компитенции в работе с данными на уровне сервера - писал DAL. потом все больше начал склоняться в вынесению функций работы с данными на СУБД. так что это лишь вопрос удобства, как уже было сказано выше однако если писать приложение которое имеет возможность изменять структуру БД, то удобнее писать DAL. ИМХО ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2006, 09:50 |
|
||
|
Зачем выносить работу с СУБД в отдельный слой?
|
|||
|---|---|---|---|
|
#18+
Мои 5 копеек: С аутсорсерами-провессионалами (уважаемыми людьми на ASP.Net-мании) делал 2 проекта (небольших, но не суть важно, поскольку эти небольшии могли стать и большими....да токо руководство компании не дало развернуться) Так вот, проектирование БД и написание хранимых процедур на T-SQL делал полностью сам, чтобы не грузить логикой обработки данных удалённых разработчиков. Они же писали DAL и собственно бизнес-объекты, web-страницы.... Ну бывало и я делал, доделывал web-тсраницы. И у нас даже сомнений не было зачем средний слой нужен, ибо вот плюсы: 1. Кодебихайн WEB-страниц компактен и не загромождён кодом взаимодействия с БД (собственно средний уровень поделён на 2 части: 1) собственно класс для связи с БД и передачей и получением данных 2) бизнес-объекты) Проще отладка 2. Коснись дело разрабатывать win-формы (что было весьма возможно. если бы речь пошла о разработке ERP-системы...поскольку уж ASP.Net её делать уж сильно отважиться надо...хотя.... :-), то эти бизнес-объекты можно было бы юзать и там) 3. В хранимых процедурах реализована бизнес-логика (порой весьма сложная), на таблицах есть триггера, ограничения, функции........однако вся эта кухня скрыта от web-разработчиков ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2006, 11:28 |
|
||
|
Зачем выносить работу с СУБД в отдельный слой?
|
|||
|---|---|---|---|
|
#18+
>1. Кодебихайн WEB-страниц компактен и не загромождён кодом взаимодействия с БД (собственно средний уровень поделён на 2 части: 1) собственно класс для связи с БД и передачей и получением данных 2) бизнес-объекты) Проще отладка >2. Коснись дело разрабатывать win-формы (что было весьма возможно. если бы речь пошла о разработке ERP-системы...поскольку уж ASP.Net её делать уж сильно отважиться надо...хотя.... :-), то эти бизнес-объекты можно было бы юзать и там) >3. В хранимых процедурах реализована бизнес-логика (порой весьма сложная), на таблицах есть триггера, ограничения, функции........однако вся эта кухня скрыта от web-разработчиков Насколько можно предположить из вышесказаного: 1. Были созданы обертки для вызова кода T-SQL 2. ВСЯ бизнес-логика лежала на СУБД Вопрос: "эти бизнес-объекты можно было бы юзать и там" - это про бизнес-объекты или все же про классы-обертки для вызова кода СУБД? О том, что стоит сделать обертки я не говорю ничего плохого - достаточно пару-тройку раз поиграться с ручным вызовом хранимок на ADO.NET, сразу появляется желание упростить этот процесс.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2006, 13:03 |
|
||
|
Зачем выносить работу с СУБД в отдельный слой?
|
|||
|---|---|---|---|
|
#18+
Добавлю свое мнение. Самое лучшее что может быть, это использоать хранимки в место T-SQL, мне моя начальница говорит что это АЦЦТОЙ, но видимо ей не понять как это искать ошибку в запросе, где просто текст... или искать ошибку в хранимке, где за тебя проверят даже названия столбцов в таблицах!---------------------------------------- Knowledge is P...O...w...E...R! My site ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2006, 13:32 |
|
||
|
Зачем выносить работу с СУБД в отдельный слой?
|
|||
|---|---|---|---|
|
#18+
Насколько я понимаю, вышесказанное относится к программированию бизнес-логики не на уровне СУБД? А эт тут при чем? Я не про бизнес логику говорил, а про типизацию сущностей. Ну и пример в лоб - супер-пупер новые DataSource контролы не позволяют делать виртуальный пейджинг кроме как с помощью ObjectDataSource. И тут уж без DAL слоя не обойтись. Да и банальный рефакторинг имеет место быть. А вообще BlackTiger прав. Не хочется писать DAL - так не пиши его. Я лично тоже его не пишу - для этого у меня CodeSmith есть Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2006, 14:12 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=33872900&tid=1391395]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
48ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 366ms |

| 0 / 0 |
