Enterprise Objects Framework
出典: フリー百科事典『ウィキペディア(Wikipedia)』
Enterprise Objects Framework(EOF)とは、1994年に NeXT の NeXTSTEP および OpenStep 向けに導入された初期のオブジェクト関係マッピング製品である。EOF は関係データベースとのやり取りの過程を抽象化し、データベース内の行をJavaやObjective-Cのオブジェクトにマッピングする。これにより、開発者は低レベルなSQLコードを書く作業からほぼ解放される。EOF は1990年代中盤に金融関係でそれなりの成功を収めた。1996年に NeXT がアップルコンピュータに吸収合併されると、EOF はアップルのアプリケーションサーバ WebObjects の一部として統合され、同製品の特徴とされるようになった。
目次 |
[編集] 歴史
1990年代初期NeXT社は、データベース利用が多くのビジネスにとって基本であり、かつそれがかなり複雑であることを認識していた。データのソースが違えばアクセス言語(あるいはAPI)も違うため、学習に要するコストや各社製品を使うことによるコストが問題となっていた。NeXT の技術者はオブジェクト指向プログラミングの利点を生かし、オブジェクトに関係データベースと対話させようと考えた。オブジェクト指向と関係データベースは全く異なる技術であるため、何らかの抽象化層を作る必要があると考えられた。それによって、開発者が低レベルで各データソースに固有な手続き的コード(SQL)を書くことから解放されるのである。
最初の試みは1992年にリリースされた Database Kit (DBKit) であった。これはオブジェクト指向フレームワークで任意のデータベースを覆ってしまおうというものである。残念ながら、当時のNEXTSTEPの性能が足りず、DBKit の設計は実用には向いていなかった。
1994年に NeXT は Enterprise Objects Framework (EOF) バージョン 1 をリリースした。DBKit よりさらに強力だが、基本的な考え方は変わっていない。
その後根本的に書き換えを行って、モジュール性を強化しつつ OpenStep にも対応させ、1995年後半に EOF 2.0 がリリースされた。EOF 2.0 は NeXT が Foundation Kit を使った初の製品であった。開発チームはたった3人で構成されていた(Craig Federighi、Eric Noyau、Dan Willhite)。
EOF は1990年代中盤に金融業系のプログラミングである程度の人気を得たが、やがて World Wide Web の成長とウェブアプリケーションの概念が生まれたことで本領を発揮することになった。EOF を使えば、古いデータベースを全くいじらずに、そのデータをWebに利用できることは明らかだった。EOF を核とし、状態管理、負荷分散、動的HTML生成などのフレームワークを追加して、NeXT は1996年に世界初のオブジェクト指向アプリケーションサーバ WebObjects をリリースした。
2000年、アップルコンピュータは EOF を独立した製品とし、Mac OS Xでのデスクトップアプリケーション開発に利用できるようにした。ただし、同時に WebObjects の主要コンポーネントとしても使われ続けている。2001年にリリースされた WebObjects 5 では、そのフレームワークを Objective-C から Java へ移植した。この変更に批判的な人は、EOF の能力の大半が Objective-C と深く結びついており、Java への移植によって EOF が持っていた美しさと単純さが失われたと指摘している。サードパーティのツール(EOGeneratorなど)は、Objective-C と Java の差異を埋める助けとなる(主な問題は、カテゴリ機能が無くなったことに起因する)。
[編集] 動作原理
EOF はオブジェクト関係マッピングのためのツールとフレームワークを提供する。この技術は、JDBC経由の関係データベースやJNDIディレクトリといった各種データソースからデータを検索する機構と、それらデータソースにデータを書き戻す機構を提供することに特化したものである。その機構は階層化・抽象化されており、開発者は特定のデータソースやそのベンダーを意識することなく、高い抽象レベルでデータの読み書きを考えることができる。
その中心となるのはモデルファイル("EOModel")であり、視覚化ツール EOModeler か Xcode の EOModeler プラグインを使って構築する。そのマッピングは以下のように行われる。
- データベースの表をクラスにマッピングする。
- データベースの列(カラム)をクラスの属性にマッピングする。
- データベースの行(ロウ)をオブジェクト(クラスのインスタンス)にマッピングする。
既存のデータソースに基づいてデータモデルを構築することもできるし、一から構築することもできる(その場合、データベースも一から構築される)。結果として、データベースのレコードが Java のオブジェクトに変換される。
データモデルを使う利点は、固有な性質を持つデータソースとアプリケーションを分離できる点にある。アプリケーションのビジネスロジックをデータベースから分離することで、アプリケーションに変更を加えることなくデータベースを置き換えることが可能となる。
EOF は他のツールには見られないレベルでデータベース透過性を提供しており、同じモデルを使って異なるデータベースにアクセスでき、さらには複数の異なるデータベースを同時に扱うことも可能である。
[編集] 継承の利用
EOF では、オブジェクト指向の特徴である継承を活用している。オブジェクトは、より汎用的な上位のオブジェクトを「継承」し、それに何らかの特殊化を施す。オブジェクト指向プログラミングでは、全てのオブジェクトがこのような継承関係の階層に位置づけられる。しかし、関係データベースはこのような階層は持たない。EOF を使ってデータモデルを構築すると、そこにはオブジェクトの階層が反映される。すなわち、Enterprise Objects が複数の表にマップされるかビューにマップされるように設計することで、データベースの表群が継承をサポートするかのように設計することが可能である。
[編集] Enterprise Object とは何か
Enterprise Object(直訳すれば「企業オブジェクト」)は、オブジェクト指向プログラミングでビジネスオブジェクトと呼ばれるものに似ている。ビジネスオブジェクトとは、ビジネス領域での具体的あるいは概念的オブジェクト(例えば、顧客、注文、商品など)をモデル化したクラスである。EO(Enterprise Objects)が他のオブジェクトと異なるのは、そのインスタンスが何らかのデータソースとマッピングされている点である。典型的な Enterprise Object は、キーと値のペアを含み、関係データベースの行を表している。キーは列(カラム)の名前であり、その値はデータベース内のその行のそのカラムに格納されている値に他ならない。従って、EO の属性は永続性があると言える。
より正確に言えば、Enterprise Object とは、com.webobjects.eocontrol.EOEnterpriseObject インタフェースを実装したクラスのインスタンスである。
Enterprise Object には対応するモデル(EOModel)があり、そのクラスのオブジェクトモデルとデータベースのスキーマとのマッピングが定義されている。しかし、Enterprise Object 自体にはそのモデルに関する知識は存在しない。このような抽象化によって、データベース製品を切り換えても、コードを修正せずに済むのである。そのため、Enterprise Objects は高度な再利用性を有する。
[編集] EOF と Core Data
EOF の概念の多くは、2005年4月にリリースされた Mac OS X Tiger においてデスクトップアプリケーション向けに導入された。Core Data は、Cocoa API を使った開発者向けのオブジェクト-グラフ管理と永続性フレームワークである。つまり、Core Data はアプリケーションのモデル層をメモリ上に定義されたデータオブジェクト群に編成する。Core Data はそれらオブジェクトの変化を監視し、必要に応じてその変化を取り消すことができる(ユーザーが undo コマンドを実行したような場合)。そして、アプリケーションのデータの変更点をセーブする際、Core Data がオブジェクトを永続性のある記憶装置に格納する作業を行う。
このように2つの技術はよく似ているが、目的は異なる。EOF は、クライアントをデータベースサーバに接続するためのJavaベースのフレームワークである。Core Data は、デスクトップアプリケーション開発をサポートするよう設計されたObjective-Cベースのフレームワークである。Core Data と EOF には、それぞれもう一方にはない固有の機能がある。