Программирование в IIS

       

Аутентификационные данные подключения к базе данных


Общей проблемой VB-приложений является неправильная поддержка абстракции логики. Если класс clsChair создан для чтения и записи данных в источник типа базы данных, то программист может включить в этот класс свойство Connection. Свойство Connection предоставляет классу информацию, необходимую для подключения к базе данных. Такой подход нежелателен, потому что возникают проблемы с расширяемостью интернет-приложений, написанных на языке VB. Интерфейс класса не отражает реальное положение дел, поскольку объект "стул" не имеет атрибута Connection на самом деле. Размещая свойство Connection в интерфейсе, программист предполагает, что потребителю класса известно, каким образом класс взаимодействует с источником данных. Атрибут Connection и подобные технические атрибуты не должны вредить интерфейсу. Здесь правильным решением является абстрагирование в бизнес-логике от всего, что не относится к объекту в реальной жизни.

Как программист может обеспечить "чистоту" логической абстракции класса и реализовать подключение к базе данных? Ввод вручную информации о подключении в классе, разумеется, не выход из положения, так как требует изменения кода. Всякое программное обеспечение должно иметь параметры состояния, доступные при инициализации или конструировании. Для сервера Windows механизмом хранения данных состояния или инициализации является реестр, который используется всеми утилитами и службами поддержки Windows. Технология .NET унаследовала использование файлов XML для хранения данных о развертывании и состоянии интернет-приложений.

Любая система работает до тех пор, пока программному обеспечению известен контекст хранения данных инициализации. Реестр Windows отыскивается всегда одинаково, независимо от узла его расположения. Программа не должна искать реестр на диске C:, ведь на другом сервере он может располагаться в другом месте. Реестр обладает контекстом, связанным с самим узлом, а не с положением файла на узле, внутри сервера или внутри сервера на отдельном узле.
В интернет-приложениях корневой веб-каталог выступает в роли общего узла контекста. К содержимому или файлам можно обращаться в контексте корневого веб-каталога. Он может располагаться на диске C: или D:, и при выражении контекста как корневого веб-каталога не возникнет проблем, связанных с нахождением значения данного параметра инициализации. Платформа .NET унаследовала стандарт хранения данных развертывания в файлах XML с именем Web.config, которые располагаются в любом каталоге структуры веб-каталогов. Более подробная информация о приложениях .NET и использовании файла web.config приведена в лекциях 2 и 3.

Так как класс clsChair размещен в приложении COM+, то реализован интерфейс IobjectConstruct для получения аутентификационных данных при подключении к базе данных. Для его использования в список ссылок проекта класса добавлена ссылка COM+ Services Type Library (см. рис. 1.7).

Интерфейс IObjectConstrucion реализован с использованием команды Implements, и в класс добавлена подпрограмма события IObjectConstruct_Construct. Эта подпрограмма выполняется при инициализации класса и передает экземпляр объекта классу, представляемому параметром pCtorObj. Экземпляр класса, на который указывает pCtorObj, имеет свойство ConstructString. Значение ConstructString использовалось для инициализации объекта ADO Connection, повсеместно применяемого в классе clsChair. В листинге 1.4

показана подпрограмма события IObjectConstruct_Construct.

Листинг 1.4.

(html, txt)

Значение свойства ConstructString устанавливается в окне свойств службы компонентов. Для clsClass строка подключения задана в текстовом поле Constructor String (Строка конструктора) вкладки Activation (Активация) окна свойств компонента ConfigSeat.clsClass (см. рис. 1.18). При использовании данного механизма хранения данных о состоянии инициализации класс clsChair настраивается при помощи обычных служб Windows Server, с которыми знаком любой инженер, обслуживающий такой сервер.

Примечание. Технология доступа к данным Windows, использующая технологию ODBC или OLE-DB, позволяет автоматически сохранять подключения к базе данных.Экземпляр класса подключения ADO, хранящийся в m_Connection, является локальным по отношению к классу clsChair (см. рис. 1.4). Это означает, что подключение открыто, пока существует экземпляр класса clsChair. При уничтожении экземпляра класса clsChair экземпляр подключения ADO уничтожается, однако провайдер ODBC или OLE-DB сохраняет экземпляр подключения для следующего запроса. Не нужно кэшировать объекты подключения или создавать ситуации, требующие кэширования, поскольку Windows и так выполняет эту функцию.


Рис. 1.18.  Вкладка Activation (Активация) окна свойств ConfigSeat.clsClass



'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' ***** locals to class ***** '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' holds the color of the chair Private m_scolor As String

'Chair ID for class instance Private m_sID As String

'holds the ADO Connection to the data 'source that the object interacts with Private m_Connection As ADODB.Connection

Private m_sErrorMessage As String

Private Sub IObjectConstruct_Construct(ByVal pCtorObj As Object)

On Error GoTo Sub_Error_Handler Const ERROR_MESSAGE_INFO = "IObjectConstruct_Construct"

Dim sConnection As String

sConnection = pCtorObj.ConstructString

'make certain there is something If Len(sConnection) < 1 Then sConnection = DEFAULT_CONSTRUCTION_STRING End If

'establish connection to database server If m_Connection Is Nothing Then Set m_Connection = CreateObject("ADODB.Connection") End If

m_Connection.Open sConnection 'DEFAULT_CONSTRUCTION_STRING 'establish connection to database server Set m_Connection = CreateObject("ADODB.Connection") m_Connection.Open sConnection '"DSN=ASPExample"

'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sub_Exit_Done: Exit Sub

Sub_Error_Handler: 'record the error in class instance and rethrow 'for consuming software to learn of issue ProcessErr ERROR_MESSAGE_INFO & _ " Failure obtaining database connection information." & _ " Class will not connect to database" End Sub

Листинг 1.4.

Значение свойства ConstructString устанавливается в окне свойств службы компонентов. Для clsClass строка подключения задана в текстовом поле Constructor String (Строка конструктора) вкладки Activation (Активация) окна свойств компонента ConfigSeat.clsClass (см. рис. 1.18). При использовании данного механизма хранения данных о состоянии инициализации класс clsChair настраивается при помощи обычных служб Windows Server, с которыми знаком любой инженер, обслуживающий такой сервер.

Примечание. Технология доступа к данным Windows, использующая технологию ODBC или OLE-DB, позволяет автоматически сохранять подключения к базе данных.Экземпляр класса подключения ADO, хранящийся в m_Connection, является локальным по отношению к классу clsChair (см. рис. 1.4). Это означает, что подключение открыто, пока существует экземпляр класса clsChair. При уничтожении экземпляра класса clsChair экземпляр подключения ADO уничтожается, однако провайдер ODBC или OLE-DB сохраняет экземпляр подключения для следующего запроса. Не нужно кэшировать объекты подключения или создавать ситуации, требующие кэширования, поскольку Windows и так выполняет эту функцию.


Рис. 1.18.  Вкладка Activation (Активация) окна свойств ConfigSeat.clsClass


Содержание раздела