Створення користувальницьких типів інтеграції CLR – ЧАСТИНА 1

Програмування користувача типів вимагає створення повноцінного класу або структури Як і в інших типах інтеграції CLR, велика частина програмного коду прихована від розробника, який повинен реалізувати тільки частковий клас, що вимагає написання одного методу Простіше кажучи, вимоги, висунуті при створенні користувальницького типу, не відрізняються від тих, які висуваються при створенні будь-якого іншого класу До того ж існує значний список додаткових вимог до створення, тестування та використання для користувача типів Дуже важливо виробити єдині угоди для користувальницького типу, оскільки він буде потенційно використовуватися на всіх рівнях програми Вносити зміни набагато складніше, ніж ретельно продумати все з самого початку Налагодження і тестування користувальницького типу додають рівень залежностей даних і збірок NET, що виходять за межі типу CLR Розгортання користувальницького типу вимагає повного розуміння архітектури середовища NET Framework У багатьох реальних ситуаціях потрібні маніпуляції з глобальним кешем складання або, як альтернатива, безпрецедентне обєднання рівнів програми та бази даних

Більшість розробників для створення користувацьких типів використовують програми Visual Studio 2005 Professional або Team System У редакціях Standard і Express цього середовища розробки не реалізовані всі функції налагодження компонентів інтеграції CLR Також можна створювати та розгортати користувача типи за допомогою інструментарію розробки програм NET SDK Цей SDK використовує ті ж спеціальні компілятори мов програмування, що і Visual Studio Після компіляції збірка користувальницького типу завантажується в SQL Server за допомогою інструкцій T-SQL CREATE ASSEMBLY і CREATE TYPE, незалежно від того, які інструменти були використані для написання та компіляції типу Реальне значення використання інтерфейсу Visual Studio 2005 набуває в процесі розробки та налагодження За допомогою Visual Studio 2005 розробник може створювати тестові сценарії і керувати ними, що дозволяє вирішити масу питань розгортання, поки тип не буде готовий для тестування інтеграції Хоча б тільки з цієї причини програмістам, тільки починаючим працювати з середовищем NET Framework, рекомендується використовувати інтерфейс Visual Studio, а не намагатися одночасно вивчити NET SDK і NET Framework Заощаджений час і підвищена якість програмного коду з лишком окуплять кошти, витрачені на покупку ліцензії Visual Studio 2005

Додаткова Всі редакції SQL Server 2005 підтримують інтеграцію CLR Для визначенні-інформація ня того, яка версія ядра бази даних краще підходить для виробничих- Ного використання або розробки, порівняйте характеристики SQL Server з

вимогами, висунутими виробничими умовами Опис характеристик всіх доступних редакцій см в розділі 3

Незалежно від того, які інструменти ви використовуєте, NET Software Developement Kit (SDK) або Visual Studio 2005, для успішного створення користувальницького типу потрібно зрозуміти деякі вимоги і прийняти конструктивні рішення Чим повинен бути тип: класом чи структурою Як тип буде задовольняти контрактом програмування SQL Server 2005 Який режим захисту доступу до коду (СAS) необхідний для даного типу Який метод використовувати для підписання збірки Як управляти розгортанням на всіх рівнях програми

Додаткова Варіанти підписання збірки NET і режими захисту CAS см в главі 27

інформація

Нехтування ретельним розглядом даних питань може створити Увага клубок залежностей, який буде важко розплутати Наприклад, в базі даних тип не можна змінити, якщо він використовується в таблиці, а на рівні додатку структура типу повинна в точності відповідати його структурі, використовуваної в базі даних Внесення змін в користувальницький тип може зажадати, щоб дані з відповідних стовпців були збережені, а сам стовпець видалений (так як не існує інструкції alter type) Після цього нове визначення типу повинно бути завантажено в базу даних, дані переміщені в нові стовпці, а посилання в додатку на даний тип оновлені Тільки після цього робота додатку може бути продовжена Природно, деякі змінені частини можуть вимагати відновлення Збої програми більш вірогідні, якщо одна з частин була коректно модифікована

Задоволення вимог

Створення і використання для користувача типів інтеграції CLR вимагають наявності SQL Server 2005 і середовища NET Framework версії 20 Реалізації користувача типів не мають зворотної сумісності Користувальницькі типи не можуть бути використані, і на них не можуть міститися посилання в будь-яких попередніх версіях NET Framework Користувача типи можуть існувати в додатках NET без наявності маніфесту в базі даних, хоча вимоги при цьому дещо змінюються Незважаючи на віддалену схожість з типами VB6, які можуть оголошуватися в процедурі, зі старими псевдонімами типів SQL Server, для користувача типи інтеграції CLR повинні оголошуватися як структура або клас VBNET

Причини того, чому для більшості користувача типів використовують структури, можна знайти в самому фундаменті середовища NET Framework Структура має тип значення, а клас – тип посилання Структура розміщується в стеку виклику, а клас – у купі обєкта Ці, на перший погляд, незначні відмінності зумовлюють деякі суттєві відмінності в поведінці класів і структур Зібрані разом, ці відмінності виливаються у відносно великий обсяг роботи при програмуванні типів посилань або класів У табл 291 перераховані деякі відмінності між структурою і класом в середовищі NET Framework

Серед причин реалізації користувальницького типу у формі класу, а не структури, можна згадати наступні

■ Управління терміном життя Можна розглядати як гідність те, що один процес може створити екземпляр користувальницького типу, а інший – посилатися на нього навіть після завершення процесу творця Наприклад, заголовок керуючого пакета або структура ідентифікації родоводу можуть зберігатися в памяті протягом виконання пакета або ітерації

Таблиця 291 Порівняння структур і класів VBNET

Структура

Клас

Тип оголошення

Значення

Посилання

Розміщення в памяті

Стек програми

Купа обєкта

Мінімальна кількість членів

1

0

Обовязкове кількість захищених членів

1

0

Конструктор

Конструктор за замовчуванням неприпустимий Члени инициализируются в значення за замовчуванням

Конструктор за замовчуванням обовязковий (він використовується для створення нового екземпляра)

Обмеження моделі доступу

Захищені члени неприпустимі

Немає обмежень

Події

Тільки загальні (в мові C # статичні) процедури можуть бути обработчиками подій

Обробником подій може бути будь-який метод

Звідки успадковується

З SystemValueType

З будь-якого класу, крім

SystemValueType

Чи може мати спадкоємців

Ні

Так, якщо явно не оголошено

NotInheritable

Поліморфізм

Для реалізації інтерфейсу необхідна упаковка (перетворення в тип посилання)

Контракт програмування заснованого на спадкування обєкта підтримує інтерфейси

Термін життя

Не може існувати незалежно

Існує, поки досяжний

Прибирання сміття

Ні Примірники є копіями, а не посиланнями Грунтується на класі контейнера для збирання сміття

Так Фіналізується, коли не залишається активних посилань

Присвоєння

При присвоєнні копіюється (за значенням)

Клонування обєкта (за посиланням)

За відсутності присвоєння

Члени доступні

Члени недоступні

Ізоляція змін

Примірник ізольований

Зміни впливають на інші посилання

Рівність

Порівнюються окремі члени

Для порівняння обєктів використовується метод Equals

■ Поліморфізм Навіть незважаючи на те, що в SQL Server не підтримує спадкування, якщо користувальницький тип управляється кількома класами, то спадкування може бути використано за допомогою інтерфейсів керованого класу користувальницького типу У цьому випадку навантаження на структуру в стеку буде вище навантаження на клас в купі, тому тип значення буде упаковуватися Упаковка результату в копії значення обслуговується як в стеку програми, так і в купі обєкта

■ Успадкування Якщо модель програмування має підстави створити базовий користувальницький тип, з якого будуть управлятися інші типи, це може бути реалізовано тільки за допомогою класу Структури не підтримують успадкування

■ Базові типи обєктів в призначеному для користувача типі Якщо член користувальницького типу має тип посилання, такий як string, то посилання на нього вимагатиме створення обєкту в купі обєкта Якщо тип створюється як структура, то користувальницький тип буде створений в купі, але він буде містити посилання на цього члена обєкта Рідко використовуваний член може бути инициализирован як nothing, що дозволить краще зберегти структуру типу значення Часто використовуваний член менш імовірно зможе скористатися будь-якими перевагами типу значення, яке існує в програмному стеку

Джерело: Нільсен, Пол Microsoft SQL Server 2005 Біблія користувача : Пер з англ – М: ООО ІД Вільямс , 2008 – 1232 с : Ил – Парал тит англ

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*