Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Гранулярность (granularity)




Введение в ORM (Object Relationship Mapping)

Лекция 8

 

Как правило любая информационная система предполагает долгосрочное хранение данных. С точки зрения программы это выражается в том, что объекты системы могут сохраняться (persistence).

Под сохранённым объектом (persistence object) мы будем подразумевать такой объект, время жизни которого заметно превышает время запуска системы.

На практике это означает то, что состояние объекта в памяти процесса может быть записано на внешний носитель, например в файловую систему или в БД на диск.

Принципиальной проблемой, с которой сталкиваются разработчики современных систем является концептуальное несоответствие между объектной и реляционной моделями в которых производиться разработки современных приложений. Так, работа с БД, её проектирование происходят в терминах отношений (relations). В то время как работа на высокоуровневым программным кодом, отвечающим за реализацию бизнес логики происходит в терминах ООП (Объектно-Ориентированного Программирования). Кратко напомним, что основными преимуществами ООП являются:

  • Инкапсуляция
  • Наследование
  • Полиморфизм

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

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

 

Существует ряд принципиальных несоответствий между объектной и реляционной моделями. Среди них:

 

  • Гранулярность (Granularity)
  • Подтипы (Subtypes)
  • Идентификация (Identity)
  • Навигация по связям (Graph Navigation)

 

Рассмотрим каждую из проблем более подробно

 

Рассмотрим ситуацию, когда нам надо представить в объектном виде и сохранять в БД следующий класс.

 

Эта сущность представляет собой пользователя в системе. Помимо традиционного имени и фамилии она так же содержит адрес пользователя. Такая сущность тривиально отображается на таблицу в БД. Каждому полю класса соответствует колонка в таблице. Такой подход весьма прост и хорошо работает, но только в примитивных случаях. Рассмотрим ситуацию, когда у пользователя может быть несколько адресов, например: домашний и рабочий.

При таком подходе имеет место дублирование кода, не только кода отражающего колонки таблицы и поля класса, но и кода, который обрабатывает эти колонки. Проблема ещё более усугубляется когда приходиться вносить изменение, например добавить к адресу номер телефона. С точки зрения ООП имеет смысл выделить адрес в отдельную структуру, или, с т.з. языка Java – класс. Аналогичный подход – нормализация – можно применить и к таблице User, выделив адрес в отдельную таблицу. Однако, такой подход не всегда является оправданным с точки зрения производительности, но кроме того, нарушает естественную инкапсуляцию, так как адрес не является отдельной сущностью. Имеет место несоответствие гранулярности между объектной моделью и реляционной.

То, что является наиболее удобным и естественным в объектной модели, может быть неуместным в реляционной модели и наоборот. Хорошее ORM решение позволяет абстрагироваться от этой проблемы и использовать обе модели, прозрачно преобразуя классы в таблицы. Стоит отметить, что одним из решений, могущих оказать помощь в данном случае является использование типов определяемых пользователем (User Defined Types, UDT), поддержка которых предлагается во многих современных СУБД. Однако, такое решение может оказаться неудачным, ввиду того, что поддержка UDT реализована по-разному в разных СУБД, а кроме того язык SQL не предоставляет достаточно удобного способа для работы с UDT.

 




Поделиться с друзьями:


Дата добавления: 2014-01-05; Просмотров: 2283; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.