Введение

Enterprise Objects Framework, или просто EOF, был представлен компанией NeXT в 1994 году как новаторский продукт объектно-реляционного отображения для своих платформ разработки NeXTSTEP и OpenStep. EOF абстрагирует процесс взаимодействия с реляционной базой данных, сопоставляя строки базы данных с объектами Java или Objective-C. Это значительно избавляет разработчиков от необходимости писать низкоуровневый SQL-код. EOF добился определенного успеха в узких кругах в середине 1990-х годов, особенно среди финансовых учреждений, которых привлекли преимущества быстрой разработки приложений на объектно-ориентированной платформе NeXT. После слияния Apple Inc. и NeXT в 1996 году EOF стал полностью интегрированной частью WebObjects – сервера приложений, также изначально разработанного NeXT. Многие ключевые концепции EOF вновь появились в составе Core Data, который еще больше абстрагирует базовые форматы данных, позволяя использовать не-SQL хранилища.

История

В начале 1990-х NeXT Computer осознал, что подключение к базам данных было необходимо для большинства предприятий, но также потенциально сложным. Каждый источник данных имеет свой язык доступа к данным (или API), что увеличивало затраты на изучение и использование продукта каждого поставщика. Инженеры NeXT хотели применить преимущества объектно-ориентированного программирования, позволив объектам "общаться" с реляционными базами данных. Поскольку эти две технологии существенно различаются, решением стало создание слоя абстракции, изолирующего разработчиков от написания процедурного кода низкого уровня (SQL), специфичного для каждого источника данных. Первая попытка была предпринята в 1992 году с выпуском Database Kit (DBKit), который заключал объектно-ориентированный фреймворк вокруг любой базы данных. К сожалению, NEXTSTEP в то время был недостаточно производительным, а DBKit имел серьезные недостатки в проектировании. Вторая попытка NeXT была предпринята в 1994 году с Enterprise Objects Framework (EOF) версии 1, полной переработкой, которая была гораздо более модульной и совместимой с OpenStep. EOF 1.0 стал первым продуктом, выпущенным NeXT с использованием Foundation Kit и представил автовысвобождаемые объекты сообществу разработчиков. Команда разработчиков в то время состояла всего из четырех человек: Джек Гринфилд, Рич Уильямсон, Линус Апсон и Дэн Уиллхайт. EOF 2.0, выпущенный в конце 1995 года, еще больше усовершенствовал архитектуру, представив контекст редактирования. В то время команда разработчиков состояла из Дэна Уиллхайта, Крейга Федериги, Эрика Нояу и Чарли Клейсснера. EOF достиг умеренной популярности в сообществе финансовых программистов в середине 1990-х годов, но по-настоящему раскрыл свой потенциал с появлением Всемирной паутины и концепции веб-приложений. Стало ясно, что EOF может помочь компаниям подключить свои устаревшие базы данных к Web без их переписывания. С добавлением фреймворков для управления состоянием, балансировки нагрузки и динамической генерации HTML, NeXT смог запустить первый объектно-ориентированный веб-сервер приложений, WebObjects, в 1996 году, с EOF в его основе. В 2000 году Apple Inc. (которая объединилась с NeXT) официально прекратила поддержку EOF как самостоятельного продукта, что означало, что разработчики не смогут использовать его для создания настольных приложений для будущей Mac OS X. Однако он продолжал оставаться неотъемлемой частью крупного нового релиза WebObjects. WebObjects 5, выпущенный в 2001 году, был значительным тем, что его фреймворки были портированы с их родного языка программирования Objective-C на язык Java. Критики этого изменения утверждают, что большая часть мощности EOF была побочным эффектом его корней в Objective-C, и что EOF потерял ту красоту или простоту, которой он когда-то обладал. Сторонние инструменты, такие как EOGenerator, помогали компенсировать недостатки, привнесенные Java (в основном из-за потери категорий). Кодовая база Objective-C была повторно представлена с некоторыми изменениями разработчикам настольных приложений в виде Core Data, части API Cocoa от Apple, с выпуском Mac OS X Tiger в апреле 2005 года.

Как работает EOF

Enterprise Objects предоставляет инструменты и фреймворки для объектно-реляционного отображения. Эта технология специализируется на предоставлении механизмов для извлечения данных из различных источников, таких как реляционные базы данных через JDBC и каталоги JNDI, а также механизмов для сохранения данных обратно в эти источники. Эти механизмы разработаны с использованием многоуровневого, абстрактного подхода, позволяющего разработчикам рассматривать извлечение и сохранение данных на более высоком уровне, чем конкретный источник данных или поставщик. Центральным элементом этого отображения является файл модели (EOModel), который создается с помощью визуального инструмента – EOModeler или плагина EOModeler для Xcode. Отображение работает следующим образом:

Таблицы базы данных отображаются в классы. Столбцы базы данных отображаются в атрибуты класса. Строки базы данных отображаются в объекты (или экземпляры классов). Вы можете создавать модели данных на основе существующих источников данных или строить модели данных с нуля, которые затем используются для создания структур данных (таблиц, столбцов, соединений) в источнике данных. В результате записи базы данных преобразуются в объекты Java. Преимущество использования моделей данных заключается в том, что приложения изолированы от специфики источников данных, к которым они обращаются. Такое разделение бизнес-логики приложения и логики базы данных позволяет разработчикам изменять базу данных, используемую приложением, без необходимости изменения самого приложения. EOF обеспечивает уровень прозрачности базы данных, не встречающийся в других инструментах, и позволяет использовать одну и ту же модель для доступа к базам данных разных поставщиков, а также устанавливать связи между базами данных разных поставщиков без изменения исходного кода. Его сила заключается в представлении базовых источников данных в виде управляемых графов постоянных объектов. Проще говоря, это означает, что он организует слой модели приложения в набор определенных в памяти объектов данных. Затем он отслеживает изменения в этих объектах и может отменять эти изменения по запросу, например, при выполнении пользователем команды "отменить". Когда приходит время сохранить изменения в данных приложения, объекты архивируются в базовые источники данных.

Как пользоваться наследством

При разработке Enterprise Objects разработчики могут использовать объектно-ориентированную возможность, известную как наследование. Например, объекты "Клиент" и "Сотрудник" могут наследовать определенные характеристики от более общего объекта "Человек", такие как имя, адрес и номер телефона. Хотя подобный подход является неотъемлемой частью объектно-ориентированного проектирования, реляционные базы данных не поддерживают наследование напрямую. Однако, используя Enterprise Objects, можно создавать модели данных, отражающие объектные иерархии. То есть, можно проектировать таблицы базы данных таким образом, чтобы поддерживать наследование, а также проектировать объекты предприятия, которые соответствуют нескольким таблицам или конкретным представлениям таблицы базы данных.

Что такое Enterprise Object (EO)?

Предприятие Объект аналогично тому, что в объектно-ориентированном программировании часто называют бизнес-объектом — классу, моделирующему физический или концептуальный объект в бизнес-домене (например, клиент, заказ, товар и т. д.). Отличие EO от других объектов заключается в том, что данные его экземпляра сопоставлены с хранилищем данных. Как правило, предприятие Объект содержит пары ключ-значение, представляющие строку в реляционной базе данных. Ключ, по сути, является именем столбца, а значение — данными, содержавшимися в этой строке в базе данных. Таким образом, можно сказать, что свойства EO сохраняются вне времени жизни конкретного запущенного приложения. Более точно, Enterprise Object — это экземпляр класса, реализующего интерфейс com.webobjects.eocontrol.EOEnterpriseObject. Предприятие Объект имеет соответствующую модель (называемую EOModel), которая определяет сопоставление между объектной моделью класса и схемой базы данных. Однако предприятие Объект не имеет явного знания о своей модели. Этот уровень абстракции позволяет переключать поставщиков баз данных, не затрагивая код разработчика. Это обеспечивает высокую степень повторного использования Enterprise Objects.

EOF и основные данные

Несмотря на общее происхождение, эти две технологии разошлись, при этом каждая из них сохранила часть функциональности исходной кодовой базы Objective-C, дополнив её новыми возможностями.

Функции, поддерживаемые только EOF

EOF поддерживает произвольный SQL, общие контексты редактирования, вложенные контексты редактирования, а также предварительную выборку и пакетную обработку ошибок связей – все это функции оригинальной реализации на Objective-C, которые не поддерживаются Core Data. В Core Data также отсутствует эквивалент EOModelGroup: класс NSManagedObjectModel предоставляет методы для объединения моделей из существующих моделей и получения объединенных моделей из пакетов.

Функции, поддерживаемые только основными данными

Core Data поддерживает вычисляемые свойства, множественные конфигурации в модели управляемых объектов, локальные хранилища и агрегацию хранилищ (данные для заданной сущности могут быть распределены по нескольким хранилищам), настройку и локализацию имен свойств и предупреждений о валидации, а также использование предикатов для проверки свойств. Эти возможности оригинальной реализации Objective-C не поддерживаются в Java-реализации.