Блог Александра Божко
Архивы
Рубрики
Поделись с другими!
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

EntityDACLogoТехнология объектно-реляционного отображения (ORM) заинтересовала меня более десяти лет назад. Именно тогда мы с группой единомышленников создали Интернет-проект «Mda по-русски» (mda-delphi.ru), посвященный вошедшему в состав Delphi 7 Architect продукту Bold for Delphi. В то время этот продукт вызвал довольно оживленный интерес у Delphi разработчиков, нам удалось организовать довольно большое и продуктивное сообщество, собрать множество материалов и полезных наработок.  К сожалению, проект исчерпал себя, отчасти ввиду кризиса Delphi, отчасти из-за субъективных обстоятельств, но в основном из-за того, что Bold перестал официально поддерживаться.

Так или иначе, интерес к подобным решениям существует, и довольно странно, что в то время как для других сред разработки есть огромное количество различных ORM библиотек, для Delphi их не так и много. Если верить Wikipedia за всю историю существования Delphi, было лишь три проприетарные реализации. Это, Bold for Delphi, абсолютно провальный проект ECO, реализованный компанией Borland для Delphi for .Net, и, возможно вы удивитесь, вполне современный, поддерживаемый и активно развивающийся проект от компании DevArtEntityDAC.
Именно о последнем продукте сегодня и пойдет речь.

Но прежде всего, давайте разберемся с тем, что же такое ORM и какие преимущества эта технология предоставляет разработчикам. Согласно всё той же Wikipedia, ORM (англ. object-relational mapping, рус. объектно-реляционное отображение) это технология программирования, которая связывает базы данных с концепциями объектно-ориентированных языков программирования, создавая «виртуальную объектную базу данных».

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

Очевидно, что именно с этой точки зрения и следует рассматривать EntityDAC.

Итак, EntityDAC по сути включает в себя следующие функциональные компоненты:

  • EntityDeveloper  – визуальный редактор моделей с поддержкой генерации кода;
  • LINQ, в качестве независимого языка запросов, в том числе на уровне Code completion в Delphi IDE.
  • TDataSet совместимые компоненты, для работы с данными, обеспечивающие поддержку практически любых data-aware контролов.

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

  • Простота работы с сущностями в коде;
  • Cross-database разработка, т. е.  одно приложение может подключаться к различным БД;
  • Поддержка наследования метатипов;
  • Возможность использования как Delphi синтаксиса, так и С# LINQ синтаксиса для обращения к данным;
  • Поддержка каскадного сохранения данных;
  • Поддержка submit и rollback в рамках контекста и многое другое.

 

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

На небольшом примере я хочу показать, как выглядит процесс создания приложения в EntityDAC. В качестве эксперимента я взял маленький фрагмент (две сущности) реальной системы. Сразу хочу извиниться за «невысокий художественный уровень», поскольку снимал экран без какой-либо предварительной подготовки, непосредственно в процессе написания кода.

Итак, у нас есть две сущности: Компания и Проект. Связаны они отношением один-много, т. е. каждый проект закреплён за каким-то клиентом. Хотя у меня имеется готовая БД, я решил сделать приложение с первичной моделью, в соответствии с которой уже будет сгенерирована база.
Как гласит документация, EntityDAC поддерживает четыре типа моделей:

Code-mapped entities.

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

Attribute-mapped entities.

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

XML-mapped entities.

Для этого типа генерируются только классы сущностей. Метаданные модели будут содержаться во внешнем XML файле, который может быть сгенерирован с помощью Entity Developer или вручную.

Attribute-mapped objects.

Этот тип модели похож на модель “Attribute-mapped entities”, но здесь генерируются наследники класса  TObject, а не TEntity.

Модель Code-mapped entities в документации рекомендована, как самая простая и интуитивно понятная. Собственно, ее я и выбрал.

Процесс создания модели в Entity Developer, который я запечатлел на первом видео в принципе, не вызывает особых сложностей.

На выходе я получил модель следующего вида.

EntityDACModel

Далее формируем базу данных. В качестве СУБД я выбрал SQLite. Следует обратить внимание на то, что создать новую базу можно непосредственно в редакторе модели. Entity Developer позволяет проконтролировать то, каким образом элементы модели будут «мапиться» (проецироваться) в базу. После этого следует сгенерировать код – четыре модуля, которые будут использоваться при создании приложения.

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

После создания нового приложения следует подключить сгенерированные на предыдущем этапе модули. Далее следует «обязательная программа» – размещение необходимых для подключения модели компонентов: TEntityConnection, TEntityXMLModel, TEntityContext, а также TUniDACDataProvider – дата провайдер, позволяющий использовать компоненты UniDAC для доступа к БД и, соответственно, SQLiteUniProvider из набора UniDAC, для доступа к SQLite.

Я не стал выносить весь этот набор в отдельный модуль, хотя документация рекомендует это сделать.

На первом этапе создается простейший список компаний. При этом в коде обрабатываются сущности. Отображение и добавление данных для «подчинённой» таблицу я реализовал с помощью компонента TEntityTable. И, собственно говоря, работа с этим компонентом мало чем отличается от работы с любым другим DataSet’ом. Собственно, запуском и проверкой работоспособности приложения я и ограничился.

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

Если говорить о субъективных ощущениях, то в принципе, общее впечатление от продукта довольно приятное. Всё работает достаточно стабильно. Особо хочу отметить, что процессы генерации БД и генерации кода – контролируются пользователем. Мы можем самостоятельно определить каким образом будут «мапиться» атрибуты различных типов.

Опять же, я невольно пытаюсь сравнивать Bold for Delphi и EntityDAC. Очевидными недостатки первого продукта были – необходимость использовать дорогостоящий редактор модели и собственные контролы для работы с данными. В добавок к этому проблемы с русским языком, которые закрывались пользовательскими патчами. В EntityDAC, как мы могли убедиться, все обстоит совершенно иначе. Здесь используются обычные VCL db-aware компоненты для работы с данными. И если Bold for Delphi многими воспринимался как эксперимент, то EntityDAC – вполне самодостаточный продукт, с помощью которого можно вести разработку полноценных проектов. Более того, по моей информации, с помощью EntityDAC уже реализовано несколько серьезных проектов и «там всё в порядке».

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

Что касается цены продукта, то цена вполне демократичная, однопользовательская лицензия профессиональной редакции с исходным кодом обойдется в $400. Но вы можете серьезно сэкономить, воспользовавшись программой High Five.

365

 

 


Поделись с другими!
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Продукты DevArt
Купить онлайн:



Читай русскоязычные Delphi блоги
Каталог блогов Blogdir.ru
Яндекс.Метрика