Шумская Е.А.
Самарский государственный аэрокосмический университет имени акад. С.П. Королёва (национальный исследовательский университет), г. Самара, магистрант факультета
информатики, [email protected]
Использование технологии объектно-реляционного отображения при разработке конвертера учебных
курсов
КЛЮЧЕВЫЕ СЛОВА
Технология объектно-реляционного отображения, конвертер учебных курсов, LMS Moodle, .NET, база данных, СУБД, ADO.NET Entity Framework, PetaPoco, NHibernate.
АННОТАЦИЯ
В статье анализируются преимущества и недостатки технологии объектно-реляционного отображения (Object-relational mapping — ORM), рассматриваются наиболее популярные .NET ORM-библиотеки, приводятся примеры их использования при разработке конвертера учебных курсов.
Современный процесс обучения требует быстрого и эффективного усвоения знаний, а, значит, и перестройки самого учебного процесса за счет применения инновационных технологий, в том числе и информационных. Интернет, необходимые средства связи и Web-технологии позволяют сделать компьютерное обучение более интересным и эффективным. Современные информационные и телекоммуникационные технологии дают возможность объединять образовательные ресурсы, разработанные во всем мире, и использовать их для своих собственных образовательных целей.
Дистанционное обучение через Интернет сегодня востребовано и быстро развивается, так как для этого имеются все возможности, как в техническом так и в интеллектуальном плане [1]. Большинство образовательных организаций активно внедряют и используют в процессе обучения различные системы управления контентом, мультимедийные ресурсы, разрабатывают авторские модули и дополнительные инструментальные средства.
В Самарском государственного аэрокосмическом университете на базе кафедры программных систем в 2009 учебном году была открыта «Школа информатики СГАУ», для которой в 2010-2011 г.г. был создан сайт дистанционного обучения на базе LMS Moodle. На протяжении этих лет преподавателями кафедры в систему было добавлено много дидактических материалов (в том числе лекционные и тестовые задания). Параллельно
велась разработка дистанционной обучающей системы (ДОС), построенной на технологии виртуальных миров, которая должна поддерживать образовательный процесс по компьютерным дисциплинам (информатике и программированию) в школе информатики СГАУ Поскольку наполнение контента системы является трудоёмким процессом, возникла идея переноса данных из системы дистанционного обучения на базе LMS Moodle в ДОС, разработанную на платформе .NET. Обе системы работают под управлением различных СУБД и имеют разные структуры баз данных (БД), поэтому стандартных инструментальных средств, для решения этой задачи, найдено не было.
В связи с этим появилась необходимость разработки конвертора для автоматической загрузки учебных материалов из базы данных LCMS Moodle в базу данных ВОС, развернутую на удалённом сервере. Алгоритм работы конвертера можно разделить на три этапа: чтение данных из БД LMS Moodle, преобразование объектной модели, запись в базу данных ВОС. Общая схема работы конвертера тестов представлена на рис. 1.
Подключение и извлечение тестов и лекций из БД LCMS Moodle
Записать изображения в
ф лиловую систему" сервера
Записать е базу
Обучаемый
Рис. 1. Общая схема работы системы конвертирования контента Для работы с базой данных в .NET существует технология ADO.NET. Достоинством этой технологии является высокая производительность, но в современном мире напрямую она практически не используется, так как код, в котором бизнес-процессы и низкоуровневая работа с базой данных соединены воедино, сложно поддерживать и тестировать. Пример чтения вопросов из БД LMS Moodle с помощью ADO.NET приведён на рис. 2.
Технология объектно-реляционного отображения (ORM) позволяет абстрагироваться от способа хранения данных и манипулировать данными на уровне объектов, что позволяет с лёгкостью переходить от использования одной СУБД к другой, осуществлять модульное тестирование, улучшает читаемость кода.
Существует множество различных ORM-библиотек для платформы .NET, решающих разные задачи и имеющих разные возможности. Все они основаны на механизме рефлексии или процессе обнаружения типов во время выполнения программы. Рефлексия (отражение) — исключительно мощный механизм, позволяющий во время выполнения обнаруживать и использовать типы и их члены, о которых во время компиляции ничего не было известно, но у этой мощи есть два серьёзных недостатка: безопасность типов на этапе компиляции не контролируется, отражение работает медленно [2]. Недостатки рефлексии и являются основными недостатками технологии ORM.
public IList<Question> GetQuestionsQ
{
string queryString = "SELECT * from mdl_que5tion";
var questions = new List<Question>Q;
using (var command = new Command(queryString))
{
SqlCeDataReader reader = command.SqlCommamd.ExecuteReaderQ;
while (reader.ReadQ)
{
questions.Add( new Question(
int .Parse(reader[ "id"] .ToStringQ
reader["name"].ToStringQ,
reader["questiontext"].ToStringQj
reader[ "image"].ToStringQ.,
int.Parse(reader["category"].ToStringQ)));
}
reader.CloseQ ;
}
return questions;
}_
Рис. 2. Чтение вопросов из БД с помощью ADO.NET Если в системе необходимо намного чаще осуществлять операции выборки, чем операции манипулирования данными, но при этом избегать работы с плохо-типизированными объектами, то часто используются микро-ORM: Dapper, Insight, PetaPoco и другие. Микро-ORM имеют более высокую производительность, занимают небольшой объём памяти, но в тоже время обеспечивают масштабируемость кода и облегчают тестирование. Рассмотрим библиотеку PetaPoco, так как она является достаточно новой и о ней существует мало информации на русском языке. Библиотека PetaPoco состоит из одного файла, поддерживает транзакции, работает с различными СУБД (SQL Server, SQL Server CE, MySQL, PostgreSQL и Oracle) и включает текстовые шаблоны T4 для автоматической генерации классов [3]. Шаблоны позволяют игнорировать некоторые таблицы и поля при создании классов. Это оказалось очень полезным при разработке конвертера контента, так как, подсистема тестирования в LMS Moodle очень гибко конфигурируется и включает в себя множество различных типов
вопросов и настроек теста, а ВОС в настоящий момент поддерживает вопросы с выбором ответа, поэтому все таблицы и поля читать из БД LMS Moodle не требуется. Результатом генерации является файл, содержащий набор классов для передачи данных. Пример сгенерированного класса представлен на рис. 3. С помощью атрибутов можно настраивать отображение полей базы данных на свойства классов.
После генерации классов достаточно создать экземпляр базы данных и осуществить выборку из нужной таблицы (рис. 4).
В перспективе эта микро-ORM с лёгкостью позволит осуществить конвертацию данных в обратном направлении и обновление данных, если конвертация уже была произведена.
[TableHameC'md^question" ) ] [PrimaryKey("id")] [ExplicitColumns]
public partial class mdl_question : mysqlDB.Record<mdl_question>
{
[Column]
public ulong id { get; set; }
[Column]
public long category { get; set; }
[Column]
public string name { get; set; }
[Column]
public string questiontext { get; set; }
[Column]
public string image { get; set; } }_
Рис. 3. Класс, сгенерированный с помощью шаблонов Т4 var db = new PetaPoca.Database("itschool");
var questions = db.Query<mdl_questionï-(1,SELECT * FROM ndl_question") ;
Рис. 4. Чтение вопросов из БД с помощью ORM-библиотеки PetaPoco Наиболее популярной ORM для .NET является ADO.NET Entity Framework. Entity Framework имеет встроенный в Visual Studio графический редактор и поддерживает три подхода к созданию объектной модели и базы данных: «Code First», «Database First» и «Model First». «Code First» позволяет определить модель с помощью классов C# или VB.Net, создаёт базу данных и добавляет в неё таблицы на основе кода. «Database First» позволяет реконструировать модель на основе существующей базы данных. «Model First» позволяет создать новую модель с помощью конструктора Entity Framework, а затем сформировать схему базы данных на основе модели. Модель сохраняется в EDMX-файле. Ее можно просматривать и изменять в конструкторе Entity Framework. На основе EDMX-файла автоматически формируются классы в приложении, с которыми происходит взаимодействие [4].
Для разработки конвертера курсов наиболее удобен подход
DataBaseFirst, так как база данных LMS Moodle уже создана. Однако по умолчанию Visual Studio 2012 не включает графического редактора для работы с СУБД MySQL, поэтому необходимо установить приложение «MySql for Visual Studio». Объектная модель, полученная на основании БД LMS Moodle, с помощью автогенерации представлена на рис. 5.
После генерации модели также довольно просто прочитать список вопросов из базы данных с помощью LINQ (Language Integrated Query) (рис. 6).
В режиме отладки можно посмотреть SQL-запрос, который генерирует Entity Framework. В запросе перечисляются все поля для выбора через запятую, а самой таблице присваивается псевдоним.
Ещё одна популярная и пожалуй самая мощная ORM-библиотека с открытым исходным кодом для С# — NHibernate. Она формирует SQL-запросы
Л 4
h
* шпч^иу
f" «que***
РтЛЬЬ
f" l4l.«v<K.4
NlMjMl'lll PiEpvrlKi rd/niiu
- Рчрм.*
L " if ri
f- гштм
А
f «1*1
А шгсЬ
Мгг ■çjbon Ртр-стЬгг-.
Р .(WW,«»*-
Pue. 5. Объектная модель> полученная с помощью Entity Framework
using (var db = new itschoolEntitiesf))
{
var query = from b in db.mdl_question select b;
}
Рис. 6. Чтение вопросов из БД с помощью EntityFramework для загрузки и манипулирования данными на основании xml-файлов, в которых описываются сущности и связи [5]. Сегодня уже существует библиотека Fluent NHibernate, имеющая удобное API для описания преобразований сущностей базы данных в объектную модель. Для генерации объектной модели и схемы БД существует приложение с графическим интерфейсом «Entity Developer», который также может быть интегрирован в Visual Studio. На сегодняшний день существуют две версии этого приложения: коммерческая и бесплатная, в которой присутствует
ограничение на количество сущностей в объектной модели.
Fluent NHibernate гибко конфигурируется и при правильной настройке позволяет добиться достаточно высокой производительности. Его целесообразно использовать для работы со сложными запросами в крупных проектах. Для каждого класса объекта необходимо создавать класс, описывающий преобразование этого объекта в сущность базы данных. Для таблицы mdl_question в БД LMS Moodle нужно создать класс Question и класс QuestionMapping (рис. 7).
SQL-запрос, формируемый NHibernate идентичен SQL-запросу, полученному с помощью ADO.NET Entity Framework.
Что касается производительности трёх рассмотренных ORM-библиотек, то на всех запросах чтения данных из таблицы, содержащей около 3000 записей, они показывают хорошие результаты (в среднем 400 миллисекунд), немного быстрее оказался Fluent NHibernate, он справляется с задачей за 200 миллисекунд. Это стало определяющим фактором при выборе ORM-библиотеки для разработки конвертера учебных курсов, так как объём конвертируемых данных велик.
public class Question
{
protected Question()
{
}
public virtual int Id { get; set; ]> public virtual int Category { get; set; } public virtual string Name { get; set; } public virtual string QuestionText { get; set; } public virtual string Image { get; set; }■
}
public class QuestionMapping : ClassMap<Question>
{
public QuestionMapping()
{
Id(x => x.Id).Column("id");
Map(x => x.Name).Column("name") .Not.Nullable();
Map(x => x.Image)
. NullableQ .Column("image");
Map(x => x.QuestionText)
.Not .riullablef) .Column("questiontext");
Map(x => x.Category)
.Not.Nullable().Column("category");
}
>_
Рис. 7. Пример работы с библиотекой Fluent NHibernate В заключение хочется отметить, что не существует универсального
решения: в каких-то случаях скорость разработки играет большую роль и следует выбирать автогенерацию; в каких-то случаях важна гибкость настройки, в каких-то производительность, зачастую важны все критерии и приходится искать решения для достижения некоего баланса, но использовать технологию ORM несомненно стоит, так как все программные продукты должны быть спроектированы с учётом возможных изменений.
Литература
1. Зеленко Л.С., Шумская Е.А. Программа для автоматизированного создания тестов в среде LMS MOODLE// Сборник науч. трудов Междунар.научно-технич. конф. «Перспективные информационные технологии-2013». — Самара: изд-во СНЦ РАН, 2014. — С. 425-426.
2. Рихтер Дж. CLR via C#. Программирование на платформе Microsoft .NET Framework 4.5 на языке C#. — СПб.: «Питер», 2013. — 896 с.
3. Topten software. URL http://www.toptensoftware.com/petapoco/.
4. Шаблон разработки Model First для плятформы Entity Framework. URL http://msdn.microsoft.com/ru-ru/data/jj205424.aspx.
5. NHibernate Forge. URL http://nhforge.org/.