Научная статья на тему 'Использование технологии объектно-реляционного отображения при разработке конвертера учебных курсов'

Использование технологии объектно-реляционного отображения при разработке конвертера учебных курсов Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
242
28
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ТЕХНОЛОГИЯ ОБЪЕКТНО-РЕЛЯЦИОННОГО ОТОБРАЖЕНИЯ / КОНВЕРТЕР УЧЕБНЫХ КУРСОВ / LMS MOODLE / .NET / БАЗА ДАННЫХ / СУБД / ADO.NET ENTITY FRAMEWORK / PETAPOCO / NHIBERNATE

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Шумская Екатерина Андреевна

В статье анализируются преимущества и недостатки технологии объектно-реляционного отображения (Object-relational mapping ORM), рассматриваются наиболее популярные.NET ORM-библиотеки, приводятся примеры их использования при разработке конвертера учебных курсов.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Использование технологии объектно-реляционного отображения при разработке конвертера учебных курсов»

Шумская Е.А.

Самарский государственный аэрокосмический университет имени акад. С.П. Королёва (национальный исследовательский университет), г. Самара, магистрант факультета

информатики, kate-beauty@mail.ru

Использование технологии объектно-реляционного отображения при разработке конвертера учебных

курсов

КЛЮЧЕВЫЕ СЛОВА

Технология объектно-реляционного отображения, конвертер учебных курсов, 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>

{

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

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/.

i Надоели баннеры? Вы всегда можете отключить рекламу.