77224

Расширение функциональности Entity Framework

Курсовая

Информатика, кибернетика и программирование

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

Русский

2015-02-02

96 KB

5 чел.

САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

Кафедра системного программирования

Курсовая работа

Расширение функциональности Entity Framework

Выполнил:

Хритошин Даниил Викторович

студентка 4 курса

Математико-Механического факультета

444 группы

Руководитель:

Евдокимов Виктор

Аспирант кафедры «Информационных систем в экономике»

Инженерно-Экономического Университета

Санкт-Петербург

2009
Содержание

[1] Архитектура

[1.1] Нижний уровень

[1.2] Средний уровень

[1.3] Верхний уровень

[2] Используемые технологии

[2.1] ADO.NET Entity Framework

[2.2] Microsoft Workflow Foundation

[2.3] Asp.Net Ajax Toolkit

[2.4] jQuery

[3] Доработка Entity Framework

[4] Модуль валидации

[5] Заключение


Введение

Veritas Medical Clinical Registry (VCTR) ― это приложение, предоставляющее возможности документооборота и ведения медицинских исследований. В частности, это могут быть испытания лекарственных препаратов, внедрение новых операционных технологий, проведение психологических исследований.

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

Такое требование накладывает весьма серьезные ограничения на структуру базы данных и на используемые внутри бизнес логики объекты.

Одними из основных документов является «протокол исследований» а также основанные на нём «результаты исследований». Они содержат объемную информацию о датах проведения, отчёты участников исследования, общее содержание и массу второстепенной информации. Из-за существующей структуры  базы данных возникла одна из технических проблем передачи информации, о которой будет рассказано в дальнейшем.

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

Кроме того, решены проблемы относительно автоматизации построения и развёртывания приложения на конечной машине.

Архитектура

В качестве интерфейса взаимодействия с конечным пользователем предполагается использовать либо веб интрейфес, либо специальный клиент.

Это требование определяет, что в приложении будет использован как минимум один слой с логикой взаимодействия клиента и сервера. Было решено делать структуру приложения трёхзвенной. А именно:

Нижний уровень – это база данных, которая служит непосредственно для хранения информации.

Средний уровень – это уровень бизнес логики. Все бизнес процессы сосредоточены именно в этом уровне. Для предоставления интерфейса более внешним слоям было решено использовать веб сервис, реализующий необходимую бизнес логику.

Верхний уровень – это непосредственно клиент веб сервиса бизнес логики. В данном случае в роли веб сервера будет рассматривать сайт.

Нижний уровень

В качестве базы данных был выбран продукт Microsoft SQL Server 2005, сочетающий в  себе высокую производительность, возможность распределённой работы сразу на нескольких физических серверах и относительно низкую стоимость при построении конечного продукта. Масштабируемость является одним из основных преимуществ, так как в случае увеличения числа пользователей системы будет достаточно лишь добавить некоторое количества новых серверов в систему и произвести несложную систему репликации.

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

Средний уровень

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

В качестве технологии взаимодействия была выбрана технология Windows Communication Foundation корпорации Microsoft. Взаимодейтсвие с базой происходит благодоря технологии Entity Framework.

Кроме того, стоит отметить, что относительно сложная система документооборота по сути является графом состояний документов или так называемой State Machine. Для описания этих состояний было использовано средство Microsoft Workflow Foundation, которое позволило во многих местах отказаться от написания кода вручную в пользу автоматического построения и позволило сосредоточится именно на бизнес логике приложения.

Верхний уровень

Верхним уровнем системы должен быть клиент логического уровня. Предполагается, что таких клиентов будет несколько, но, на данный момент, единственным клиентом является веб сайт, обеспечивающий необходимое графическое представление данных, а также манипуляции с ними. В качестве платформы для построения системы был выбран ASP.Net, распологающийся веб-сервере IIS 7. Такая связка была выбрана по нескольким причинам: во-первых, это производительность. Кроме высокой скорости быстродействия на конкретной машине IIS позволяет создавать веб сайты, которые будут работать параллельно на нескольких машинах. Поскольку запросы к веб серверу являются независимыми, то в случае нехватки производительности можно будет просто добавить несколько новых серверов, и расходы на синхронизацию будут практически нулевыми.

Во-вторых, стоит заметить, что IIS предоставляет встроенные средства безопасности, поддержку шифрованных соединений и механизмы по предотвращению XSS инъекций.

В-третьих, ASP.Net является представителем семейства технологий .Net, что позволяет переиспользовать некоторые код, написанный для логического уровня и использовать те же самые обьекты, которые будут запрашиваться у среднего уровня. Это позволит сэкономить время разработки и сохранить единообразие системы.

И наконец, связка IIS+Asp.Net позволяет практически задаром реализовывать различные системы аутотентификации, разграничения прав доступа и ролей, что будет полезно при отображении и работе с данными.

Используемые технологии

ADO.NET Entity Framework

ADO.NET Entity Framework является молодой технологией от компании Майкрософт. Она позволяет разработчикам обращаться к данным, используя объектную модель вместо логической или реляционной модели данных. Entity Framework помогает абстрагировать логическую схему данных в концептуальную модель и обеспечивает несколько способов взаимодействия с концептуальной моделью через службы Object Services и поставщика данных, называющегося EntityClient.

Вместо работы с таблицами и полями разработчик может работать непосредственно с объектами, которые могут быть представлены как таблицей или частью таблицы, так и несколькими таблицами с некоторыми логическими связями.

Особое внимание стоит уделить существованию технологии LINQ to Entities, которая позволяет использовать строго типизированный синтаксис Linq для получения доступа к данным, что заметно упрощает написане кода.

Microsoft Workflow Foundation

Если оглянуться, то мир вокруг нас — это бесконечная череда сменяющих друг друга процессов. Мы сажаем зерно, оно прорастает, цветет, оставляет потомство, погибает. На его месте вырастает что-то новое. И так день за днем. Люди пытаются описать эти процессы, симулировать их на компьютере, придумывают что-то новое. Для этого создаются различные ментальные модели. Именно для описания движения и взаимодействия объектов внутри программ создана технология Microsoft Workflow Foundation. Это связующее звено, которое позволяет создавать взаимодействия, связывающие объекты между собой или процессы, протекающие внутри самих объектов. Workflow Foundation (WF) разделяет все процессы на два основных типа: последовательные процессы (sequential) и процессы, основанные на состояниях (state machine), которые в нашем случае наиболее интересны.

Любой документ проходит какую-то жизненную цепочку, от создания до окончательного утверждения. Каждое его состояние описывается определённым содержание, степенью наполненности, задействованными людьми, списком действий и списком состояний, к которым может привести это действие.

Модель жизненного цикла документа идеально сочетается с моделью процесса основанного на состояниях для технологии Workflow Foundation. Кроме увеличения стабильности работы приложения, при проектировании с использованием этой системы снижается и время разработки, так как нет необходимости заботится о коде для описания состояний и для описания переходов. Встроенный дизайнер позволяет решать эти задачи за разработчика.

К недостаткам стоит отнести некоторую требовать к ресурсам, но в конце концов было решено, что достоинства продукта перевешивают его недостатки.

Asp.Net Ajax Toolkit

Для веб сервера было использовано несколько технологий. В частности, это Asp.Net Ajax Toolkit, который предоставляет набор расширений для стандартных контролов Asp.Net, сильно увеличивающий их возможности, и позволяет выполнять асинхронное обновление страницы, без использования веб сервисов.

Стоит заметить, что некоторой слабостью ASP.Net можно считать работу с данными на клиенте. Ведь, прежде чем отослать данные на сервер гораздо удобнее обработать их на клиенте, проверить на корректность заполнения, автоматически заполнить необходимые поля. Это позволит сэкономить как траффик, так и время. Серверное, путём уменьшения запросов, клиентское из-за отсутствия задержек при передаче информции и ожидании сервера.

jQuery

Для того, чтобы побороть эту слабость была использована библеотека Javascript под названием JQuery. Она умело покрывает достаточно широкой диапазон повседневных функций и предоставляет при этом удобный API для расширений, с помощью которых можно добавить любую другую функциональность. Абстрактность в ней заложена на уровне ядра — речь идет о выборе DOM-элементов — и она извлекает из него максимум пользы. И что важнее всего, использование этой библиотеки подразумевает следование хорошему стилю в программировании и хорошо сочетается с другими частями JavaScript-кода. DOM-ориентированность этой библеотеки позволяет легко и быстро генерировать динамические данные и производить их обработку. А возможность добавления расширений позволило с лёгкостью реализовывать необходимую функциональность. В частности, мной был реализован модуль, предоставляющий функциональность для валидации вводимых данных непосредственно в элементы веб страницы. Об этом модуле будет рассказано в дальнейшем.

Доработка Entity Framework

Стоит заметить, что объекты, которые получаются при взаимодействии с базой очень удобно использовать в качестве DTO (Data Transfer Object) для передачи элементов из бизнес-логики на веб часть и обратно, для сохранения изменений. (Например, мы захотели отредактировать параметры протокола, оставили комментарий, или выполнили любое значимое с точки зрения логики действие).

Основная проблема данной технологии заключается в том, что объекты, которые прошли через десерилизацию оказываются откреплёнными от контекста, и, соответственно, возникают трудности с правильным сохранением объекта.

Отдельно стоит выделить несколько случаев:

  1.  Сохранение объекта без связей
  2.  Сохранение объекта со связями
    1.  Со связью один к одному.
    2.  Со связью один ко многим

В первом случае технологией Entity Framework предусматривается применение свойств объекта в состоянии Detach к существующему в контексте объекту.

В таком случае алгоритм удивительно прост. Мы загружаем из контекста последнюю версию нашего объекта по ключу, после чего, используя функцию ApplyPropertyChanges, переносим свойства десериализованного объекта на объект внутри контекста. После чего уже сохраняем объект внутри контекста.

Теперь рассмотрим случаи со связями. Вначале стоял острый вопрос о том, как именно сохранять те или иные связи, сохранять ли весь граф объектов.

Для этого было решено использовать технологию критериев, в некоторой степени, аналогичную Nhibernate. Идеология такова: мы в любом случае сохраняем сам объект и сохраняем указанные в объекте связи, но при этом не сохраняем сами связанные объекты, за исключением тех случаев, когда сохраняемого объекта не содержится в базе.

Такой подход был в первую очередь выбран по следующим причинам

  1.  В реальных случаях использования, редко когда редактируется сразу несколько связанных объектов. Чаще всего эти сохранения можно выполнять последовательно, что обеспечит лучшую сохранность данных в случае сбоев системы.
  2.  В некоторых случаях мы загружаем только сам объект, без связанных (для экономии трафика, затрат времени сервера базы данных и тп). Соответственно для десериализованного объекта нельзя однозначно определить, были ли  у него не загружены связи или эти связи были удалены.

Самый простой случай, в случае наличия связи один к одному. В этом случае мы извлекаем два объекта по уникальным ключам, после чего с первым производим обычную процедуру сохранения, после чего добавляем связь на второй объект из контекста.

Более сложный случай, при наличии связи со многими объектами. В этом случае мы должны идентифицировать, какие из объектов должны стать связанными, какие следует удалить, а какие оставить без изменений. Что также реализуется путём сравнения объектов с образцами взятыми из контекста.

Кроме того, был реализован метод глубокого сохранения. Суть метода такова, что вначале мы передаём на сторону сервера бизнес логики весь набор объектов, после чего пробегая по графу и помечая сохранённые объекты последовательно сохраняем каждый из них. Данная функциональность была реализована в базовых классах BaseSQLDataManager и BaseProvider.

Модуль валидации

Отдельной проблемой было создание единого механизма валидации для всего проекта. В случае серверной стороны существует встроеная система проверки корректности данных ASP.Net и решено было использовать исключительно её. В случае же клиентской валидации общего решения не существовало. Было испробовано несколько библеотек сторонних разработчиков, но они были признаны малопригодными, либо из-за неудобства использования, либо из-за привязки к обьектам либо просто из-за недостаточной функциональности. Было решено реализовать собственную библеотеку. Так как проверка ввода будет активно использовать DOM модель документа, решено было реализовать эту библиотеку, как плагин к существующей библеотеке JQuery.

Базовой сущностью библеотеки стал объект ‘валидатор’. В большинству случаев он привязывается к какому либо обьекту ввода (будь то поле input, textarea или select) и содержит в себе опции, влияющие на его поведение:

  •  Функция валидации ― функция, принимающая на вход объект, к которому был привязан валидатор и опции, которые были переданы при его создании. Функция возвращает значения «Истина» или «Ложь», что должно соответствовать состоянию обьекта.
    Поскольку, во многих случаях, требуется стандартные проверки было создано пространство функций, содержащие частоиспользуемые функции проверки. Например, проверка того, что в поле было введено какое либо значение отличное от пустого или, например, проверка на соответствие значения заданному регулярному выражению
  •  Текст ошибки ― в случае если контрол оказался в невалидном состоянии нужно предпринять какие-то действия, указывающие пользователю, что именно введено не так и, в идеале, подсказывающие пользователю как правильно осуществить действие ввода. Лучше всего для этого подходит извещение об ошибке.
    Так как заранее неизвестно, где лучше всего располагать сообщение, то был реализован механизм контейнеров, которые позволяют поместить сообщение в необходимых местах. По умолчанию текст ошибки выводится сразу за элементом управления, к которому привязан валидатор, но путем изменения опций его можно перместить в любое место формы, например, для организации аналога
    Validation Summary в Asp.Net. То есть вывод всех ошибочных мест в одном, хорошо доступном месте. Такой метод отображения полезен в случае, если в каждый момент времени видны не все поля ввода, например, при использовании аккордиона.
  •  Группа валидации ― текстовое поле, которое отвечает за то, при каком именно запросе необходимо проводить валидацию. Предположим, что на одной странице располагаются несколько форм ввода, соответствующие различным, возможно логически связанным, объектам. Требовать одновременного правильного ввода в оба объекта было бы глупостью, поэтому был необходим механизм, по разделению валидаторов на категории. Именно таким механизмом и является система групп валидации, которая, в некоторой степени аналогична механизму групп валидации Asp.Net
  •  Список событий ― набор событий, при которых происходит проверка состояния и принимаются соответственные действия. В частности событиями могут быть потеря фокуса ввода, что интуитивно означает, что человек закончил ввод в выбраное поле и переместился к следующему, нажатие кнопки на клавиатуре, щелчок или наведение мышки. Кроме того, все валидаторы поддерживают проверку состояния по запросу.

Это лишь наиболее важные параметры. Существует множество других параметров, которые позволяют пределить внешний вид выводимого сообщения, формат вывода, поведение в случае успешной или неуспешной проверки и так далее.

Кроме того существует ещё один не менее важный объект, а именно менеджер валидации. Он хранит в себе ссылки на существующие валидаторы, позволяет включать и отключать необходимые валидаторы. Наиболее важными функциями менеджера являются функции

  •  isValid(validationGroups) ― функция которая принимает на вход одну или несколько групп валидации и выводит результат соответствующий состоянию валидаторов в указанных группах. В случае, если группа валидации не указана, то происходит проверка всех активных валидаторов.
  •  getErrorMessages(validationGroups) ― функция, которая позволяет получить массив сообщений об ошибках тех валидаторов, которые находятся в невалидном состоянии. Входные параметры аналогичны предыдущей функции.
  •  validateElement(element, validationGroups) ― функция, которая позволяет проверить конкретный элемент, что полезно в случае, если элемент используется более чем одним валидатором. Параметр validationGroups в данном случае аналогичен параметрам в предыдущих функциях и является необязательным. Кроме того аналогичную функциональность можно получить при помощи использования стандартного механизма селекторов jQuery.

Менеджер валидации обеспечивает удобную и простую проверку корректности данным. Простейшим примером может служить вот такой код:

<input type="button" value="Apply" onclick="if($.validator.isValid(‘myGroup’)) {do something;}else{alert($.validator.getErrorMessages().join(‘\n’))}" />

Который позволяет выполнить какие-либо действия, если ввод осуществлённый в валидаторы помеченные группой «myGroup» был корректен и вывести предупредуждение содержащее тексты ошибок всех валидаторов в некорректном состоянии.

Реализация данного модуля находится в файле jquery.validator.js и для его использования необходима библиотека jQuery версии 1.3.*. В настоящий момент модуль активно используется в проекте и доказал свою эффективность в местах, где необходимы сложные клиентские проверки правильности ввода.

Заключение

В результате работы над проектом был создан модуль, дополняющий функциональность Entity Framework, который является универсальным решением восстановления функциональности при сериализации и десериализации объектов. Стоит отметить, что данный модуль является альтернативой существующей технологии Entity Bag, которая на момент создания модуля была в зарождающемся состоянии и, какое-либо практическое её использование, на тот момент, не представлялось возможным.

Был реализован модуль проверки корректности данных, который является клиентским аналогом модулей валидации в Asp.Net, обеспечивает простоту использования и лёгкость стыковки серверной и клиентской логики. Модуль без каких либо изменений включён в проект и прошёл практические испытания, в ближайшем будущём планируется публикация его в списке плагинов для jQuery.
Список литературы:

  1.  C# Web Services - Building Web Services with ASP.NET and.NET Remoting, Wrox, 2006
  2.  NET Test Automation Recipes A Problem Solution Approach, Apress, 2006
  3.  Designing Scalable .NET Applications, Redler Rickard, 2003
  4.  Автоматизированное тестирование программного обеспечения, Элфрид Дастин, Джефф Рэшка, Джон Пол
  5.  Administrative tasks using Windows PowerShell, Frank Koch, 2008
  6.  jQuery in Action, Bear Bibeault and Yehuda Katz, 2007
  7.  Ajax в действии, Дейв Крейн, Эрик Паскарелло, Даррен Джеймс, 2007
  8.  JavaScript Bible, Danny Goodman, 2005
  9.  http://msdn.microsoft.com/en-us/library/default.aspx
  10.  http://www.asp.net/
  11.  

 

А также другие работы, которые могут Вас заинтересовать

71674. ОСНОВЫ ИЗМЕРЕНИЙ 836 KB
  Материал изложен с учетом требований программ дисциплин по которым осуществляется подготовка инженеров-метрологов в Белорусском государственном университете информатики и радиоэлектроники и охватывает ряд вопросов касающихся основ измерений.
71675. Метрология и измерения: Учебно-методическое пособие 3.97 MB
  Учебно-методическое пособие Метрология и измерения предназначено для индивидуальной работы студентов изучающих курсы измерений. Обработка результатов измерений с однократными наблюдениями Обработка результатов многократных наблюдений при прямых измерениях.
71676. ОЧЕРКИ ПО ТЕОРИИ И ПРАКТИКЕ ДИЗАЙНА НА ЗАПАДЕ 823.5 KB
  Дизайн в моде, о нем написано много и напишут еще больше. Вполне понятно, на глазах одного поколения возникла и утвердилась новая профессиональная деятельность, которую нужно как-то осмыслить. Сначала писали о терминах, о том, что английское «design» — производное от итальянского «disegno»...
71677. ИНФОРМАТИКА: КОМПЬЮТЕРНЫЙ ПРАКТИКУМ: «WORD 2007, EXCEL 2007» 7.88 MB
  Цель данного пособия - объяснить студентам, а также всем интересующимся основы работы в текстовом и табличных процессорах Microsoft Word и Microsoft Excel 2007. Необходимость написания данной работы возникла в связи с появлением нового поколения программных продуктов корпорации Microsoft.
71678. Религиоведение: Учебное наглядное пособие 613 KB
  Цели задачи и практическое предназначение курса Основные понятия религиоведения Понятие бытия и человека в христианской религии Основные этапы становления религиоведения как науки Происхождение и ранние формы религии Предпосылки религиозности и формирования религиозных институтов.
71679. Заполнение таблиц MS EXEL данными и формулами 31.62 KB
  Выполнить задание 1 (Формирование структуры таблицы и заполните ее постоянными значениями), используя технологию выполнения операций в конце задания Выполнить задание 2 Технология работы с формулами на примере подсчета количества разных оценок в группе в экзаменационной...
71680. ОПРЕДЕЛЕНИЕ МОМЕНТА ИНЕРЦИИ В МАШИНЕ АТВУДА 78.94 KB
  Цель работы: изучение вращательного и поступательного движений на машине Атвуда, определение момента инерции блока и момента сил трения в оси блока. Описание установки и её назначение. Машина Атвуда является настольным прибором, ее изображение приведено на рис. 3.1. На вертикальной стойке...