Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Обзор инструментов SEO-оптимизатора и методов продвижения" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
← Декабрь 2005 → | ||||||
1
|
2
|
4
|
||||
---|---|---|---|---|---|---|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
13
|
14
|
15
|
16
|
17
|
18
|
19
|
20
|
21
|
22
|
23
|
24
|
25
|
26
|
27
|
29
|
30
|
31
|
Статистика
0 за неделю
На дальнем рубеже ...
Информационный Канал Subscribe.Ru |
Выпуск одинадцатый: На дальнем рубеже ... Доброй ночи!
Один
вопрос, преред тем как начать этот выпуск ... Ну а теперь - о деле. Как я и обещал, сегодняшний выпуск будет чисто практическим - "подключил, настроил - работает". А разговор у нас пойдет о работе с базой данных, или, если быть конкретнее, как при помощи Microsoft Data Access application block значительно упростить себе жизнь при получении и сохранении даных.
Почему выпуск называется "На дальнем рубеже ..."? Мысленно представим себе схему многоуровневого (n-tier) приложения. Представили? Вот прямо перед нами нагромождение стендов, прилавков, все увешано рекламой, постоянно слышны сообщения "Уважаемые посетители, если вы пройдете на третий этаж, то в отделе парфюмерии ..." - это Presentation Layer. Выходим оттуда и попадаем на улицу, переполненную деловито снующими людьми, передающим друг другу дипломаты с пачками денег - Business Object Layer. О! видели? Вот какой-то мужчина просто исчез в момент, когда он уже почти передал битком набитый дипломат - не иначе как транзакция откатилась. Осторожно идем дальше и попадаем на территорию порта. Он кипит жизнью, торопливо снуют туда-сюда доверху загруженные грузовики, огромные трюмы кораблей извергают сотни тонн груза, чтобы тут же заполнить освободившееся место новыми контейнерами - это Data Access Component Layer. А если пройти по волнорезу вон туда, к самому краю, то можно увидеть самый краешек загадочных глубин океана - сервисов, служб и компонент Операционной Системы. А где-то, далеко на горизонте, мрачными скалами вздымается защита хранилища данных - Database Layer. А, что? Да-да, мы же о программировании ... Вобщем, я всего лишь хотел сказать, что тот волнорез, на котором мы стоим и который защищает нас от океана, обычно называют Data Access Helper Layer - уровень, находящийся между DACL и Database и упрощающий их взаимодействие. Самый дальняя граница нашего мира, который проектировали лично мы, рубеж, за которым начинается Система.
Итак, что нам дает Microsoft Data Access application block и стоит ли тратить время на его инсталляцию и изучение описания?
Я перечислил основные моменты, полезность которых чуствуется сразу. В документации к Enterprise Library вы найдете подробное изложение 1001 причины, почему ей действительно стоит пользоваться, но и этого пожалуй достаточно, чтобы продолжить читать дальше, не так ли? Теперь посмотрим, как это выглядит на практике. Сразу определимся с версиями продуктов. Я использовал последние доступные версии:
Если у вас не установлен release VisualStudio 2005 - лучше не терять время и подключить версию Enterprise Library for .NET Framework 1.1. Дело в том, что для компиляции Enterprise Library for .NET Framework 2.0 необходима release версия .Net Framework 2.0 (version 2.0.50727). Даже если у вас установлена Visual Studio 2005 Beta - не надейтесь обойтись установкой всего лишь run-time .NET Framework release. Библиотека у вас может и скомпилируется, а вот VS 2005 Beta запускаться уже не будет - я убедился в этом на собственном печальном опыте, думаете откуда бы у меня иначе нашлось время и желание доставать VS 2005 release и инсталлировать на своем компьютере, начисто снося все, что имело хоть какое-то отношение к слову Beta? :) Enterprise Library for .NET Framework 1.1 не так уж сильно отличается от своей следующей версии (под .NET 2.0), так что много вы не потеряете. Смотрите сами, если не считать изменений во внутренней реализации, в новой версии добавилось:
Вобщем, я буду рассматривать работу с Enterprise Library for .NET Framework 2.0, но с небольшими изменениями вы можете проделать то же самое со старой версией под .NET 1.1. Итак, поехали:
Дело в том, что в конфигурационный файл автоматичски добавляются настройки и для других application blocks, на которые ссылается наш Data Access application block. К счастью, единственное, что нам прийдется указать - так это параметры строки соединения. Для этого:
Вобщем, изменяйте названия и значения параметров таким образом, чтобы соединив их в одну строку, вы бы могли получить ту самую строку соединения, которая раньше прописывалась руками в конфигурационном файле приложения. Теперь перейдем к написанию самого кода. Поставим перед собой простую, но типичную задачу: вызвать хранимую процедуру, принимающую на вход несколько параметров, получить возвращаемый результат в виде DataSet и отобразить его на странице при помощи элемента управления DataGrid. Для примера возьмем процедуру "Employee Sales by Country", которая принимает на вход два параметра: начало и окончание периода и возвращает набор записей, описывающих продажи, совершенные в указанный промежуток времени. Для сравнения, сначала рассмотрим вариант без использования Data Access application block. Он может выглядеть примерно так:
Теперь посмотрим на новый вариант с использованием Data Access application block:
Думаю, результат комментировать не нужно. Мало того, это решение можно упростить еще больше. Если вы использовали старую, 1-ю версию Data Access application block, возможно вы помните, что там все вызовы реализовывались всего одной строкой кода, например:
Зачем же в новой версии понадобилось усложнять работу и вводить дополнительный объект Database? Это было сделано как раз для того, чтобы упростить переход с одного типа базы данных на другой. В случае с Database нам достаточно изменить конфигурационный файл и DataFactory вернет нам экземпляр совсем другого типа объекта, унаследованного от Database. Перегруженные виртуальные методы этого объекта содержат код, учитывающий специфику именно выбранного нами источника данных. В старой же версии для выполнения операций с базой данных мы использовали статические методы класса SqlHelper, которые нельзя перегрузить и поэтому для смены типа бызы нам пришлось бы править код, заменяя вызовы статических методов SqlHelper (умеющего работать с MS SQL Server) скажем на вызовы OracleHelper, умеющего делать то же самое, но для Oracle. Но! Если мы знаем что наш проект не будет постоянно перенастраиваться с одного источника данных на другой (для реального проекта это достаточно серьезная работа, что служит хорошим поводом семь раз подумать, а уж потом принять такое решение), мы можем достаточно легко вернуть простоту использования первой версии. Для этого можно написать класс-оболочку со статическими методами (аналог SqlHelper), которые будут принимать на вход параметры, аналогичные параметрам методов класса Database, создавать этот объект и вызывать его соответствующий метод. Например:
Тогда наш пример превращается в:
А теперь сравните его с нашим первоначальным вариантом ... Еще пара моментов о реализации Data Access application block ... Как видите, вы передаете параметры для вызова хранимой процедуры просто перечислив их через запятую. Для того чтобы правильно сформировать запрос, application block получит метаданные о хранимой процедуре, сформирует массив объектов SqlParameter и, при необходимости, приведет тип переданных вами параметров к типам параметров, которые требуются хранимой процедуре. Для того, чтобы производительность программы не снижалась, полученные метаданные кешируются и в следующий раз берутся уже из кеша. Кроме метода ExecuteDataSet, класс Database содержит следующие методы для возвращения других типов данных:
Конечно, возможности Data Access application block не исчерпываются перечисленными выше примерами. Но ... уже давно наступила ночь и Шахерезаде пора заканчивать дозволенные речи ... Я думаю, что я рассказал достаточно, чтобы вы решили, стоит ли вам использовать этот блок в вашей работе. И конечно, как всегда я буду рад услышать ваши вопросы и пожелания, пишите на мой адрес.
Удачи вам, приятной увлекательной работы, и - до следующего выпуска! |
Subscribe.Ru
Поддержка подписчиков Другие рассылки этой тематики Другие рассылки этого автора |
Подписан адрес:
Код этой рассылки: comp.soft.prog.prgnotes Архив рассылки |
Отписаться
Вспомнить пароль |
В избранное | ||