エンタープライズ オブジェクト フレームワーク
Enterprise Objects Framework(略称EOF )は、 NeXT社が1994年にNeXTSTEPおよびOpenStep開発プラットフォーム向けの先駆的なオブジェクト・リレーショナル・マッピング製品として導入しました。EOFは、データベースの行をJavaまたはObjective-Cのオブジェクトにマッピングすることで、リレーショナル・データベースとのやり取りを抽象化します。これにより、開発者は低レベルのSQLコードを書く手間を大幅に軽減できます。[ 1 ]
EOFは1990年代半ば、NeXTのオブジェクト指向プラットフォームの迅速なアプリケーション開発の利点に惹かれた金融機関の間で、ニッチな成功を収めました。 1996年のApple社とNeXT社の合併以降、EOFはWebObjects (これもNeXT社が開発したアプリケーションサーバー)に完全に統合されたコンポーネントへと進化しました。EOFの中核概念の多くは、基盤となるデータ形式をさらに抽象化し、非SQLストアをベースとすることを可能にした Core Dataの一部として再び登場しました。
歴史
1990年代初頭、NeXT Computer社は、データベースへの接続がほとんどの企業にとって不可欠であると同時に、潜在的に複雑であることを認識しました。データソースごとに異なるデータアクセス言語(API)が存在するため、各ベンダーの製品を習得して使用するコストが増大していました。NeXT社のエンジニアたちは、オブジェクト指向プログラミングの利点を活用し、オブジェクトをリレーショナルデータベースと「対話」させることを目指しました。この2つの技術は大きく異なるため、解決策として抽象化レイヤーを作成し、開発者が各データソース固有の低レベルの手続き型コード(SQL)を記述する必要がないようにしました。
最初の試みは1992年にリリースされたDatabase Kit(DBKit)でした。これは、あらゆるデータベースをオブジェクト指向フレームワークで包むものでした。しかし残念ながら、当時の NEXTSTEPは十分な機能を備えておらず、DBKitには重大な設計上の欠陥がありました。
NeXTの2度目の試みは1994年、Enterprise Objects Framework (EOF) バージョン1で行われました。これは完全な書き換えであり、モジュール化がはるかに進み、OpenStepとの互換性も向上しました。EOF 1.0は、 NeXTがFoundation Kitを使用してリリースした最初の製品であり、開発者コミュニティに自動リリースオブジェクトを導入しました。当時の開発チームは、ジャック・グリーンフィールド、リッチ・ウィリアムソン、ライナス・アップソン、ダン・ウィルハイトのわずか4名でした。1995年後半にリリースされたEOF 2.0では、アーキテクチャがさらに改良され、編集コンテキストが導入されました。この時点での開発チームは、ダン・ウィルハイト、クレイグ・フェデリギ、エリック・ノヤウ、チャーリー・クライスナーで構成されていました。
EOFは1990年代半ばに金融プログラミングコミュニティでそこそこの人気を博しましたが、ワールドワイドウェブとウェブアプリケーションの概念の出現によって真価を発揮するようになりました。EOFは、企業が既存のデータベースを書き換えることなくウェブに接続できるようにする上で役立つことは明らかでした。状態管理、負荷分散、動的HTML生成のためのフレームワークを追加することで、NeXTは1996年にEOFを中核とする最初のオブジェクト指向ウェブアプリケーションサーバーであるWebObjectsをリリースしました。
2000年に、Apple Inc. (NeXTと合併) は、EOFをスタンドアロン製品として正式に廃止しました。これは、開発者がそれを使用して、登場予定のMac OS X用のデスクトップアプリケーションを作成できないことを意味しました。ただし、EOFはWebObjectsの新しいメジャーリリースの不可欠な部分であり続けました。2001年にリリースされたWebObjects 5は、フレームワークがネイティブのObjective-Cプログラミング言語からJava言語に移植されたという点で重要でした。この変更を批判する人々は、EOFの力のほとんどはObjective-Cのルーツによる副作用であり、EOFはかつての美しさやシンプルさを失ってしまったと主張しています。EOGeneratorなどのサードパーティツールは、Javaによってもたらされた欠陥 (主にカテゴリの喪失による) を補うのに役立ちます。
Objective-C コード ベースは、 2005 年 4 月にMac OS X Tigerがリリースされた際に、Apple のCocoa APIの一部であるCore Dataとして、デスクトップ アプリケーション開発者向けにいくつかの変更を加えて再導入されました。
EOFの仕組み
Enterprise Objectsは、オブジェクト・リレーショナル・マッピングのためのツールとフレームワークを提供します。このテクノロジーは、JDBCおよびJNDIディレクトリを介してリレーショナルデータベースなどの様々なデータソースからデータを取得するメカニズムと、それらのデータソースにデータをコミットするメカニズムを提供することに特化しています。これらのメカニズムは、階層化された抽象的なアプローチで設計されており、開発者は特定のデータソースやデータソースベンダーよりも高いレベルでデータの取得とコミットについて考えることができます。
このマッピングの中心となるのは、EOModelerまたはXcodeのEOModelerプラグインなどのビジュアルツールで構築するモデルファイル(「EOModel」)です。マッピングは以下のように機能します。
- データベース テーブルはクラスにマップされます。
- データベース列はクラス属性にマップされます。
- データベースの行はオブジェクト (またはクラス インスタンス) にマップされます。
既存のデータソースに基づいてデータモデルを構築することも、ゼロからデータモデルを構築してデータソース内にデータ構造(テーブル、列、結合)を作成することもできます。これにより、データベースレコードをJavaオブジェクトに変換できます。
データモデルを使用する利点は、アプリケーションがアクセスするデータソースの特異性から分離されることです。アプリケーションのビジネスロジックとデータベースロジックを分離することで、開発者はアプリケーションを変更することなく、アプリケーションがアクセスするデータベースを変更できます。
EOF は、他のツールには見られないレベルのデータベースの透過性を提供し、同じモデルを使用して異なるベンダーのデータベースにアクセスできるようにし、ソース コードを変更せずに異なるベンダーのデータベース間の関係を可能にします。
その強みは、基盤となるデータソースを永続オブジェクトの管理されたグラフとして公開することにあります。簡単に言えば、アプリケーションのモデル層を定義済みのメモリ内データオブジェクトのセットとして整理することを意味します。そして、これらのオブジェクトへの変更を追跡し、ユーザーが元に戻すコマンドを実行した際など、必要に応じて変更を元に戻すことができます。そして、アプリケーションのデータへの変更を保存する際には、オブジェクトを基盤となるデータソースにアーカイブします。
継承の使用
エンタープライズオブジェクトの設計において、開発者は継承と呼ばれるオブジェクト指向機能を活用できます。例えば、CustomerオブジェクトとEmployeeオブジェクトはどちらも、名前、住所、電話番号など、より汎用的なPersonオブジェクトから特定の特性を継承する場合があります。このような考え方はオブジェクト指向設計に固有のものですが、リレーショナルデータベースでは継承が明示的にサポートされていません。しかし、エンタープライズオブジェクトを使用することで、オブジェクト階層を反映したデータモデルを構築できます。つまり、複数のテーブルやデータベーステーブルの特定のビューにマッピングするエンタープライズオブジェクトも設計することで、継承をサポートするデータベーステーブルを設計できます。
エンタープライズ オブジェクト (EO)
エンタープライズオブジェクトは、オブジェクト指向プログラミングでよく知られているビジネスオブジェクト、つまりビジネスドメイン内の物理的または概念的なオブジェクト(顧客、注文、商品など)をモデル化するクラスに似ています。EOが他のオブジェクトと異なる点は、インスタンスデータがデータストアにマッピングされることです。通常、エンタープライズオブジェクトには、リレーショナルデータベースの行を表すキーと値のペアが含まれます。キーは基本的に列名であり、値はデータベースのその行に格納されていた内容です。そのため、EOのプロパティは、実行中の特定のアプリケーションが終了した後も保持されると言えます。
より正確に言えば、エンタープライズ オブジェクトは、com.webobjects.eocontrol.EOEnterpriseObject インターフェイスを実装するクラスのインスタンスです。
エンタープライズオブジェクトには、クラスのオブジェクトモデルとデータベーススキーマ間のマッピングを定義する対応するモデル(EOModel)があります。ただし、エンタープライズオブジェクトは自身のモデルを明示的に認識しません。このレベルの抽象化により、開発者のコードに影響を与えることなく、データベースベンダーを切り替えられます。これにより、エンタープライズオブジェクトは高い再利用性を実現します。
EOFとコアデータ
共通の起源にもかかわらず、2 つのテクノロジは分岐しており、それぞれのテクノロジは元の Objective-C コード ベースの機能のサブセットを保持しながら、いくつかの新しい機能を追加しています。
EOF でのみサポートされる機能
EOFはカスタムSQL、共有編集コンテキスト、ネストされた編集コンテキスト、リレーションシップのプリフェッチとバッチフォールトをサポートしています。これらはすべて、オリジナルのObjective-C実装の機能であり、Core Dataではサポートされていません。また、Core DataはEOModelGroupに相当する機能を提供していません。NSManagedObjectModelクラスは、既存のモデルからモデルをマージするためのメソッドと、バンドルからマージされたモデルを取得するためのメソッドを提供しています。
Core Data でのみサポートされる機能
Core Dataは、フェッチされたプロパティ、管理対象オブジェクトモデル内の複数の設定、ローカルストア、ストアの集約(特定のエンティティのデータが複数のストアに分散されている可能性がある)、プロパティ名と検証警告のカスタマイズとローカライズ、そしてプロパティ検証における述語の使用をサポートしています。これらの機能は、オリジナルのObjective-C実装ではサポートされていません。
外部リンク
参考文献
- ^ Warner, Robert, Privat, Michael. Pro Core Data for IOS, Second Edition . オランダ, Apress, 2011年. 2.