Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

 
liveinternet.ru: показано количество просмотров и посетителей

Библиотека :: Компьютеры и Программирование :: Начинаем изучать MySQL
<<-[Весь Текст]
Страница: из 157
 <<-
 
храниться также коллекции и связи с другими объектами.
* В большинстве реляционных баз данных, включая MySQL и mSQL, нет средств, 
позволяющих моделировать наследование.
Практические правила для объектно-реляционного моделирования
* У каждого сохраняемого класса в базе данных есть своя таблица.
* Поля объектов с простыми типами данных (целые, символы, строки и т. д.) 
сопоставлены колонкам в соответствующей таблице базы данных.
* Каждая строка таблицы базы данных cоответствует экземпляру соответствующего 
хранимого класса.
* Каждая связь между объектами типа «многие-ко-многим» требует таблицы-связки, 
так же как это требуется для объектов базы данных типа «многие-ко-многим».
* Наследование моделируется с помощью отношения «один-к-одному» между таблицами,
 соответствующими классу и подклассу. Вспомните адресную книгу, о которой мы 
говорили ранее. Допустим, она имеет таблицы address и person, как на рис. 8-2.

Рис. 8-2. Модель данных простого приложения адресной книги
Есть весьма неочевидная проблема, с которой сталкиваются программисты. Основная 
задача объектно-ориентированного подхода к реляционным данным - это, получив 
эти данные, немедленно создать экземпляр объекта. Приложение должно работать с 
данными только через объекты. Большинство традиционных методов программирования,
 включая разработку на С, PowerBuilder и VisualBasic, требует, чтобы 
разработчик извлек из базы данные, а затем их обработал. Главное отличие 
состоит в том, что в объектно-ориентированном программировании баз данных вы 
имеете дело с объектами, а не данными.
Рис. 8-3 показывает объектную модель, соответствующую модели данных на рис. 8-2.
 Каждая строка базы данных преобразуется в программный объект. Таким образом, 
ваше приложение принимает результирующий набор и для каждой возвращаемой строки 
создает новый экземпляр Address или Person. Труднее всего справиться с 
проблемой, о которой уже говорилось: как в приложении установить связь между 
человеком и его адресом? Объект Person, конечно, имеет ссылку на объект Address,
 относящийся к этому человеку, но сохранить объект Address внутри таблицы 
person реляционной базы нельзя. Модель данных предполагает хранение связей 
между объектами с помощью внешних ключей, для чего в таблицу person заносится 
address_id.

Рис. 8-3. Объектная модель, поддерживающая простое приложение адресной книги
Самое незначительное усложнение объектной модели может вызвать бездну проблем 
при установлении соответствия наших объектов и модели данных. Допустим, что 
Person является потомком Entity и класс Company тоже является потомком Entity. 
Как отделить Entity от Person или Company? Приведенное выше правило фактически 
является скорее рекомендацией. В некоторых случаях базовый класс является чисто 
абстрактным и, следовательно, не имеет в базе связанных с ним данных. В таком 
случае для этого класса в базе данных не будет объекта.
Трехзвенная архитектура
До сих пор мы обсуждали самую простую архитектуру для работы с WWW и простыми 
бизнес-приложениями - клиент/сервер. Однако эту архитектуру не так-то просто 
нарастить по мере роста и изменения ваших приложений. В ней также трудно 
использовать преимущества объектно-ориентированного программирования. Первая 
проблема недавно нашла отражение в дискуссиях относительно «тонких клиентов». 
Потребность в тонких клиентах происходит из беспокоящей тенденции в передаче 
клиенту все больших объемов обработки. Эта проблема проявилась в PowerBuilder и 
VisualBasic - инструментах, которые прямо вытаскивают данные из базы в GUI, а 
затем все операции над этими данными проводят в GUI.
Такая тесная привязка интерфейса пользователя к ядру базы данных приводит к 
появлению программ, которые трудно модифицировать и невозможно масштабировать 
при увеличении числа пользователей и объема данных. Если у вас есть опыт 
разработки интерфейсов пользователя, то вы сталкивались с проблемой переработки 
интерфейса в зависимости от каприза пользователя. Чтобы изолировать последствия 
такой переработки, проще всего оставить для GUI только одну задачу- действовать 
в качестве интерфейса пользователя. Такой интерфейс пользователя действительно 
является тонким клиентом.
Влияние на масштабируемость сказывается и с другой стороны. Когда требуется 
переработать приложение, чтобы оно могло справляться с возросшим числом 
пользователей и объемом данных, модификация может быть осуществлена в 
результате изменений, вносимых в базу данных, в том числе таких, которые 
состоят в распределении базы данных по нескольким серверам. Навечно привязав 
свой интерфейс к базе данных, вам приходится делать изменения в этом GUI для 
решения проблем масштабирования - проблем, связанных исключительно с сервером.
Тонкие клиенты - не единственное сегодняшнее поветрие. Другая тенденция - 
повторное использование кода. Общий для разных приложений код тяготеет к 
обработке данных, обычно называемой деловой логикой. Если вся ваша деловая 
логика располагается в интерфейсе пользователя, то добиться повторного 
использования кода будет, по меньшей мере, трудно. Решением этих проблем 
является разбиение приложения на три, а не на две части. Такая архитектура 
называется трехзвенной.
Когда мы говорим об интерфейсе пользователя у клиента, то имеем в виду 
логическое различие. Разновидностью тонкого клиента, иногда называемой 
«сверхтонким клиентом», является то, что обычно всеми воспринимается как 
Web-страница. Web-страница может динамически создаваться на Web-сервере. В этом 
случае большая часть работы клиента происходит на сервере в виде динамической 
 
<<-[Весь Текст]
Страница: из 157
 <<-