Чтение онлайн

на главную - закладки

Жанры

Шрифт:

ICustomer customer = customerService.Create("Hoвый заказчик",

"111-22-33", "Адрес нового заказчика");

IProduct product = productService.Create("Новый товар", true, 50000);

orderService.Create(customer, product, 200, DateTime.Now);

unitOfWork.Commit;

}

Обратите внимание, в приведенном коде нет ни одной зависимости, которая привязывала бы нас либо к конкретной базе данных, либо к конкретному механизму ORM. Для замены одного из этих элементов нам потребуется всего лишь реализовать служебные механизмы

вроде класса unitofWork, хранилищ и сервисов, согласно требованиям, но не приведенный код. Любой код, написанный с использованием описанных ранее механизмов, не потребует модернизации.

Еще одним хорошим ходом могло бы стать вынесение класса UnitofWork и контекста ORM в отдельные слабосвязанные сущности, для того чтобы хранилища и сервисы не были завязаны на определенные контексты ORM. Но в связи с тем, что хранилища и сервисы, по своей сути, жестко связаны с конкретным ORM, реализация такого вынесения требуется редко.

Механизмы для работы с данными

В реальных приложениях источник данных может быть самым разнообразным, чтобы продемонстрировать это, в текущем разделе мы приведем несколько механизмов для работы с данными и попробуем сравнить их производительность и простоту работы.

XML-данные

.NET Framework предлагает широкий ассортимент объектов для доступа к XML-данным, которые расположены в стандартных сборках: System.Xml, System.Xml.XPath, System.Xml.Xsl, System.Xml.Schema и System.Xml.Linq. Рассмотрим назначение и наиболее полезные классы каждой из сборок:

? System.Xml — содержит базовые классы для работы с XML, такие как

XmlDocument, XmlElement, XmlNode и множество других, которые позволяют реализовать загрузку из файлов, обработку, добавление, изменение, удаление XML-данных;

? System.Xml.XPath — содержит классы для реализации работы механизма XPath, позволяющего писать выражения к XML-документу для поиска необходимых данных;

? System.Xml.Xsl — содержит классы для поддержки реализации XSLT-преобразований XML-документа;

? System.Xml.Schema — содержит классы для поддержки XSD-схем и валидации XML-данных на их основе. Содержит большое число классов, позволяющих создавать XSD-схемы и использовать их;

? System.Xml.Lin — последняя сборка, которая недавно появилась в .NET Framework. Содержит классы, реализующие механизм доступа к XML-данным на основе LINQ-выражений. Этот механизм носит собственное название LINQ для XML. Он позволяет использовать уже известные вам LINQ-выражения для обработки XML-данных.

Рассмотрим пример обработки XML-данных с помощью LINQ для XML. Предположим, что у нас есть следующий XML-файл:

<?xml version="1.0"?>

<Orders>

<Order OrderId="99" OrderDateTime="01.02.2009">

<Address>

<Name>Владимир Иванов</Name>

<Street>yn. CTpoMTanefr</Street>

<House>12</House>

<Apartment>23</Apartment>

<City>MocKBa</City>

<Zip>100888</Zip>

<Country>Россия</Country>

</Address>

</Order>

<Order OrderId="100" OrderDateTime="01.02.2009">

<Address>

<Name>Сергей

Петров</Name>

<Street>ул. Бажова</Street>

<House>76</House>

<Apartment>123</Apartment>

<City>Eкатеринбург</City>

<Zip>620000</Zip>

<Country>Россия</Country>

</Address>

</Order>

</Orders>

Для получения имени по номеру ордера, используя LINQ для XML, мы можем написать следующий код:

XDocument xdoc =

XDocument.Load("D:\\CPS\\#Projects\\MVCBook\\MVCBook\\Order.xml");

IEnumerable<XElement> orders =

xdoc.Element("Orders").Descendants("Order");

int orderId = 100;

IEnumerable<XElement> order =

orders.Where(x => x.Attribute("OrderId").Value == orderId.ToString);

XElement address = order.Select(x => x.Element("Address"))

.FirstOrDefault;

string name = address.Element("Name").Value;

В данном примере загружается файл orders.xml, в переменной orders присваиваются все заявки (элементы Order в XML-файле). Затем с помощью LINQ-запроса находится заявка с идентификатором 100. После этого выбирает элемент адреса заявки и, в завершение, из адреса извлекается имя.

Стоит отметить, что в данном примере не производились проверки возвращаемых значений на null, что на практике делать обязательно.

Работа с данными через ADO.NET

Понятие ADO.NET на платформе .NET достаточно широкое. На самом деле LINQ для SQL и LINQ для XML, а также все остальные стандартные LINQ-реализации входят в механизм ADO.NET как составные части. Но исторически ADO.NET развивалось от версии к версии платформы через другие механизмы, такие как объекты Dataset.

Dataset — это объект, содержащий кэш данных, загруженных из источника данных. По сути Dataset — это набор объектов типа DataTable, представляющих собой таблицы данных, и DataRelation, которые описывают связи между объектами DataTable.

Практически весь функционал по работе с данными через Dataset расположен в .NET Framework в пространствах имен System.Data и System.Data.OleDb (кроме этого, существует еще более двух десятков пространств имен, название которых начинается с System.Data). Перечислим основные самые важные классы, которые используются чаще всего при работе с Dataset из System.Data:

? DataSet, DataTable, DataColumn, DataRow — различные варианты представления данных (набор, таблица, схема колонки, строка данных);

Поделиться:
Популярные книги

Михаил Федорович

Сахаров Андрей Николаевич
3. Романовы. Династия в романах
Проза:
историческая проза
6.40
рейтинг книги
Михаил Федорович

Сочинения

Брюсов Валерий Яковлевич
Проза:
русская классическая проза
5.00
рейтинг книги
Сочинения

Евангельское злато. Беседы на Евангелие

Войно-Ясенецкий Архиепископ Лука
Религия и эзотерика:
религия
христианство
православие
5.00
рейтинг книги
Евангельское злато. Беседы на Евангелие

Невидимый противник (сборник)

Стаут Рекс
Бестселлер
Детективы:
классические детективы
крутой детектив
6.00
рейтинг книги
Невидимый противник (сборник)

Том 3. Советский и дореволюционный театр

Луначарский Анатолий Васильевич
3. Собрание сочинений в восьми томах
Документальная литература:
критика
5.00
рейтинг книги
Том 3. Советский и дореволюционный театр

Сокровище

Касслер Клайв
9. Дирк Питт
Детективы:
боевики
7.00
рейтинг книги
Сокровище

Театр теней: Фантастические рассказы

Саймак Клиффорд Дональд
8. Отцы-основатели. Весь Саймак
Фантастика:
научная фантастика
5.00
рейтинг книги
Театр теней: Фантастические рассказы

Кетополис: Киты и броненосцы

Грин Грэй Ф.
1. Кетополис
Фантастика:
социально-философская фантастика
научная фантастика
стимпанк
7.78
рейтинг книги
Кетополис: Киты и броненосцы

Дороги Мертвых

Браст Стивен
1. Виконт Адриланки
Фантастика:
фэнтези
5.00
рейтинг книги
Дороги Мертвых

Том 4. Белая гвардия, Дни Турбиных (с иллюстрациями)

Булгаков Михаил Афанасьевич
Проза:
классическая проза
5.00
рейтинг книги
Том 4. Белая гвардия, Дни Турбиных (с иллюстрациями)

Феномен Солженицына

Сарнов Бенедикт Михайлович
Документальная литература:
биографии и мемуары
6.25
рейтинг книги
Феномен Солженицына

"Дальние горизонты. Дух". Компиляция. Книги 1-25

Усманов Хайдарали
Собрание сочинений
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Дальние горизонты. Дух. Компиляция. Книги 1-25

Сергей Рахманинов. Воспоминания современников. Всю музыку он слышал насквозь…

Коллектив авторов
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Сергей Рахманинов. Воспоминания современников. Всю музыку он слышал насквозь…

Ваше Сиятельство

Моури Эрли
1. Ваше Сиятельство
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Ваше Сиятельство