|
Data Access Layer - нужен ли он?
|
|||
---|---|---|---|
#18+
Речь идет об использовании объектов доступа к данным в клиент-серверном приложении (учетной системе). Система на WinForms (C#) и MSSQL Server. 1. В чем, по вашему, преимущества использования слоя доступа к данным? 2. Есть ли у вас ссылки на высказывания авторитетных специалистов по этому вопросу (книги, статьи)? 3. Считаете ли вы целесообразным рефакторинг кода наполовину написанной системы, в которой слой доступа к данным не был даже задуман? То есть, считаете ли вы, что потратив время на реализацию слоя доступа к данным для уже "вроде как готовых и работающих" компонент (модулей) можно получить выигрыш по времени за счет сокращения времени на а) поиск и исправление дефектов в этих модулях б) реализацию новых меняющихся требований к этим модулям Интересует мнение опытных специалистов (каковыми, я уверен, являются большинство форумчан). =) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2006, 11:35 |
|
Data Access Layer - нужен ли он?
|
|||
---|---|---|---|
#18+
Рефакторинг полезен всегда. Даже не минимальный. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2006, 11:55 |
|
Data Access Layer - нужен ли он?
|
|||
---|---|---|---|
#18+
Да, слой доступа к данным полезен. Однако, не развивая эту тему (лень :) ), хотелось бы подчеркнуть, что это не значит что нужно бросать все и переделывать готовые модули. Я бы написал слой и новые компоненты реализовывал через него. Изменения в старых вносил бы по мере "реализации новых меняющихся требований к этим модулям" ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2006, 12:14 |
|
Data Access Layer - нужен ли он?
|
|||
---|---|---|---|
#18+
rgb-dart Если коротко, то полностью согласен с Один1 . Стоит лишь дополнить, что любую полезную идею можно применить "не там и не так". Если чуть подробнее, то я не уверен, что Вы понимаете под Data Access Layer, поскольку этот термин употребляется в нескольких существенно разных с моей точки зрения смыслах. Первый смысл - "интеллектуальный адаптер данных". Суть его в том, что приложение работает с данными, удобно организованными с точки зрения их смысла и использования. К примеру, справочники доступны как ассоциативные массивы, parent-child иерархии обсчитаны и собраны удобно для их представления в древовидном интерфейсе, внешние ключи замены ссылками на реферируемые объекты итп. Это безусловно удобно - если требуется в приложении. Для того, чтобы это громоздкое и сильное решение было оправданным, приложение должно осуществлять большую и сложную обработку данных; в целом это подход скорее для серверов приложений и тяжелых клиентов, но не для систем класса "ввод данных плюс отчеты". Второй смысл - "абстрагирующий слой без претензий". Как правило идет в сочетании с идеями независимости от БД, возможности подключения нестандартных источников данных, каких-нибудь текстовых файлов, итп. Также разумная мысль, полезная при соблюдении одного условия - недовольство существующими классами. К примеру, если считать, что ADO покрывает все мыслимые требования доступа к данным - незачем реализовывать еще один класс, являющийся тупой прокладкой, proxy для вызова соответствующих методов ADO. Если нет - такая прокладка удобна и уместна, чтобы например для Oracle использовать ODP. Наконец, самый страшный смысл - "абстрагирующий слой ради абстрагирующего слоя". Потому что где-то написано, что так нужно и вообще очень круто. Та самая тупая прокладка, занимающаяся исключительно транзитом данных без какой-либо мысли. Неплохим критерием этого варианта является желание автоматически генерировать код соответствующих классов (вообще, желание автоматически генерировать код с моей точки зрения означает одно из двух: либо убогий язык программирования, с недостаточными для задачи возможностями, либо убогую технологию). Речь идет об использовании объектов доступа к данным в клиент-серверном приложении (учетной системе). Система на WinForms (C#) и MSSQL Server. 1. В чем, по вашему, преимущества использования слоя доступа к данным? 2. Есть ли у вас ссылки на высказывания авторитетных специалистов по этому вопросу (книги, статьи)? 3. Считаете ли вы целесообразным рефакторинг кода наполовину написанной системы, в которой слой доступа к данным не был даже задуман? То есть, считаете ли вы, что потратив время на реализацию слоя доступа к данным для уже "вроде как готовых и работающих" компонент (модулей) можно получить выигрыш по времени за счет сокращения времени на а) поиск и исправление дефектов в этих модулях б) реализацию новых меняющихся требований к этим модулям Интересует мнение опытных специалистов (каковыми, я уверен, являются большинство форумчан). =)[/quot] ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2006, 15:49 |
|
Data Access Layer - нужен ли он?
|
|||
---|---|---|---|
#18+
2 softwarer авторК примеру, если считать, что ADO покрывает все мыслимые требования доступа к данным - незачем реализовывать еще один класс, являющийся тупой прокладкой, proxy для вызова соответствующих методов ADO Не согласен. Представьте, что у вас обращения к базе идут прямо с форм. Прямо в обработчиках всяких событий от GUI. Не страшно? А если всю логику обращения к БД вынести в отдельные классы и из GUI обращаться к методам этих объектов для полкчения и модификации данных, то это уже не так страшно. При этом вызовы будут иметь какое-то осмысленное название OrderListDB.GetOrders, OrderListDB.UpdateOrder(...) и т.д. вместо многострочных конструкций по созданию sqlcomand, заполнению их параметров и т.п. (здесь OrderListDB - объект доступа к данным, который просто "тупо" выполняет запросы к базе). Смысл в том, что форма не должна знать ничего про какие-то sql-запросы... она должна отображать данные и говорить кому-то - как их пользователь хочет изменить. Кому-то = объекту доступа к данным или бизнес-объекту если система сложная. 2 steplton Я с тем же успехом могу сказать "Рефакторинг полезен НЕ всегда. Даже минимальный". И? Аргументы? Ссылки на авторитетные источники? 2 Один1 авторЯ бы написал слой и новые компоненты реализовывал через него. Изменения в старых вносил бы по мере "реализации новых меняющихся требований к этим модулям" Именно это я и делаю. =) Но обосновывать необходимость такого подхода приходится с трудом. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2006, 18:21 |
|
Data Access Layer - нужен ли он?
|
|||
---|---|---|---|
#18+
rgb-dartЯ с тем же успехом могу сказать "Рефакторинг полезен НЕ всегда. Даже минимальный". И? Аргументы? Ссылки на авторитетные источники? А кто у Вас сегодня в авторитетах ходит? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2006, 18:45 |
|
Data Access Layer - нужен ли он?
|
|||
---|---|---|---|
#18+
rgb-dartНе согласен. Представьте, что у вас обращения к базе идут прямо с форм....... Я упомянул, что понятие DAL имеет существенно разные трактовки, разные смыслы - и естественно, я назвал только направления, в то время как в реальных проектах часто оказываются реализованными те или иные компромиссы между этими подходами. Вы описываете то, что довольно близко к названному мной первому смыслу. Нисколько не возражаю и сам же упомянул; нормальный для своей ситуации подход. Но! Вы возражаете на то, что я сказал о другом подходе, номер два в моей трактовке. Это другой подход со своими плюсами и минусами. Подумайте над смыслом Вашей фразы: "Я полагаю, что названное softwarer-ом условие применимости метода2 неверно, потому что я предпочитаю метод1". Странновато звучит, правда? Теперь по поводу "страшно". Может быть страшно, может быть нестрашно. Зависит от задачи и самое главное - от программиста. Сами по себе технологии - не хороши и не плохи; это просто некоторое обобщение опыта хороших программистов; опыта, который можно вдумчиво применить и который куда чаще применяется тупо и неправильно. DAO здесь - не исключение. Могу сказать так. У меня был проект, в котором заказчик настоял на использовании объектного слоя и по итогам этого проекта я так и не увидел, чтобы этот проект получил с него что-то кроме увеличения времени разработки. У меня сейчас идет проект, который без объектного слоя просто загнулся бы. Все зависит от конкретного случая. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2006, 15:54 |
|
Data Access Layer - нужен ли он?
|
|||
---|---|---|---|
#18+
rgb-dart 2 steplton Я с тем же успехом могу сказать "Рефакторинг полезен НЕ всегда. Даже минимальный". И? Аргументы? Ссылки на авторитетные источники? Жизнь и практика лучший источник. Рефакторинг по сути, улучшение кода, понимаемости программы. Инициатором рефакторинго являетесь ВЫ. Интуитивно чувствуете что программа становится слишком замудренной, что становиться неудобно (или даже неприятно) с ней работать, используйте рефакторинг. Если не чувствуете, пока устаивает - не используйте рефакторинг. Все просто. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2006, 15:21 |
|
Data Access Layer - нужен ли он?
|
|||
---|---|---|---|
#18+
Безопасность можно делать и не в клиенте, только небольшие коррекции... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2006, 15:51 |
|
Data Access Layer - нужен ли он?
|
|||
---|---|---|---|
#18+
авторНе согласен. Представьте, что у вас обращения к базе идут прямо с форм. Прямо в обработчиках всяких событий от GUI. Не страшно? А если всю логику обращения к БД вынести в отдельные классы и из GUI обращаться к методам этих объектов для полкчения и модификации данных, то это уже не так страшно. .... Смысл в том, что форма не должна знать ничего про какие-то sql-запросы... она должна отображать данные и говорить кому-то - как их пользователь хочет изменить. Кому-то = объекту доступа к данным или бизнес-объекту если система сложная Самое интересное, что я не увидел здесь ни одного аргумента в пользу DAL. Страшно-не страшно... Почему так вам страшно, а эдак нет, непонятно. Аргументами могут быть - эффективность (как разработки, так и работы), расширяемость и пр. ИМХО, я один раз только встречал систему, где вынесение доступа к БД было оправдано - т.к. там доступ мог осуществляться как из GUI, так и в режиме робота. Nobody faults but mine... (LZ) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2006, 17:43 |
|
Data Access Layer - нужен ли он?
|
|||
---|---|---|---|
#18+
aag авторНе согласен. Представьте, что у вас обращения к базе идут прямо с форм. Прямо в обработчиках всяких событий от GUI. Не страшно? А если всю логику обращения к БД вынести в отдельные классы и из GUI обращаться к методам этих объектов для полкчения и модификации данных, то это уже не так страшно. .... Смысл в том, что форма не должна знать ничего про какие-то sql-запросы... она должна отображать данные и говорить кому-то - как их пользователь хочет изменить. Кому-то = объекту доступа к данным или бизнес-объекту если система сложная Самое интересное, что я не увидел здесь ни одного аргумента в пользу DAL. Страшно-не страшно... Почему так вам страшно, а эдак нет, непонятно. Аргументами могут быть - эффективность (как разработки, так и работы), расширяемость и пр. ИМХО, я один раз только встречал систему, где вынесение доступа к БД было оправдано - т.к. там доступ мог осуществляться как из GUI, так и в режиме робота. Nobody faults but mine... (LZ) В случае если придется переделывать GUI, вам будет легче это сделать, если логика получения данных вынесена в отдельные классы а не находится на форме. "Страшным" я называю код, который сложно модифицировать (поддерживать). Опять-таки, если у вас несколько форм получают данные из одних и тех же таблиц - зачем дублировать код на каждой форме, когда можно сделать метод в DAL-слое, который будет обслуживать обе формы? Мне продолжать?... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2006, 17:12 |
|
Data Access Layer - нужен ли он?
|
|||
---|---|---|---|
#18+
rgb-dartВ случае если придется переделывать GUI, вам будет легче это сделать, если логика получения данных вынесена в отдельные классы а не находится на форме. К сожалению, не факт. Я до сих пор вспоминаю одну систему, в исходниках которой мне довелось порыться, написанную в парадигме "все на сервере". В результате на сервере оказались хранимки, суть которых была теснейше привязана к интерфейсу (практически подготовка данных в удобном для интерфейса виде), и в результате для модификации интерфейса (что собственно меня попросили сделать) пришлось лезть еще и дорабатывать хранимки. Повторюсь: вопрос в программисте. Плохой программист, формально соблюдая самые хорошие принципы, напишет черт знает что; хороший программист, не думая ни о каких формальных теориях, напишет хорошо, в том числе с точки зрения этих самых теорий. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2006, 19:30 |
|
|
start [/forum/topic.php?fid=33&fpage=61&tid=1549452]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
37ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 138ms |
0 / 0 |