Часть полного текста документа:Введение в ObjectSpaces Тимофей Казаков (TK) Сохраняемые объекты В .NET Framework управление данными осуществляется на уровне объектов. Каждый объект характеризуется своим состоянием (свойства), поведением (методы), и является экземпляром какого-либо конкретного класса. В рамках приложения классы могут различаться по целевому назначению - это могут быть элементы управления, отображающие интерфейс пользователя, или сервисные классы, отвечающие за связи с базами данных и работу с сетевыми функциями, это могут быть классы "сообщений", обеспечивающие обмен информацией между частями приложения. Все эти сущности объединяет одна общая черта - время их жизни обычно не превышает времени жизни всего приложения. Но, кроме вышеперечисленных категорий классов, можно выделить целый ряд сущностей, время жизни которых превышает срок жизни приложения. Например, в бизнес-задачах роль подобных сущностей могут играть объекты "Клиент", "Заказчик", "Продукт". Таким объектам необходимо предоставить возможность сохранения своего состояния во внешнее хранилище. В .NET Framework существуют готовые средства для работы с сохраняемыми объектами, - есть возможность сохранять состояние объектов в двоичном виде с использованием BinaryFormatter или XML-формате с использованием XmlSerializer. Все эти средства предоставляют возможности сохранения "графов" объектов, однако сохраняемая информация не оптимизирована для выполнения запросов к хранимым данным - так, поиск необходимой информации в XML-файле, содержащем несколько тысяч записей, может оказаться неприемлемо медленным. В большинстве подобных случаев в качестве хранилища информации подойдет реляционная СУБД - данные сохраняются в таблицах, для дополнительного контроля целостности между ними устанавливаются отношения, поиск информации осуществляется с использованием языка запросов SQL. Аналогичную функциональность предоставляют специальные библиотеки Object/Relational Mapping (O/R Mapping). Такая библиотека перекладывает на себя всю "черную" работу по сохранению/загрузке информации из объектной модели приложения в реляционную модель базы данных. В .NET Framework 1.2 для этих целей есть специальный набор классов из пространства имен System.ObjectSpaces.*. ObjectSpaces Если раньше, используя ADO.NET, нужно было самостоятельно писать SQL-запросы, то теперь это требование становится необязательным - ObjectSpaces берут на себя всю заботу об отображении классов приложения на различные источники данных. При этом мы можем создавать новые объекты, сохранять их, выполнять различные запросы - все необходимые действия по взаимодействию с источником данных будут выполняться внутри ObjectSpaces (при этом данные могут находиться как в традиционной БД, так и быть представленными в XML форме) ПРЕДУПРЕЖДЕНИЕ Текущая версия ObjectSpaces поддерживает в качестве источника данных только SQL Server 7.0 и выше. Для объектов приложения ObjectSpaces предоставляет следующие возможности: Прозрачное отображение экземпляров .NET объектов на источник данных. Поддержку иерархий классов для сохраняемых объектов. Сохранение взаимосвязей между объектами (один к одному, один ко многим, многие ко многим). Отложенную загрузку связанных объектов. Построение запросов с использованием OPath. Архитектура ObjectSpaces Какая функциональность требуется от O/R Mapping-библиотеки? Кроме очевидных задач - загрузки/сохранения состояния объекта и выполнения операций поиска, есть и менее очевидные задачи - отслеживание состояния и идентификация объекта. ............ |