ECO(Enterprise Core Objects)は、Delphi 8およびC#Builderから搭載された新しいモデルドリブン開発のフレームワークです。Borland Developer Studio 2006では、すべてのエディションにECOの基本機能が搭載されており、容易にこの先進の開発機能を試すことができます。
従来のモデリングツールによる開発では、UMLを使ってシステムのアーキテクチャを設計していきます。最終的にクラスダイアグラムによって、システムの詳細な設計が記述されますが、ここで多くのツールでは、[コードの生成]メニューによってクラスダイアグラムからコードを生成します。しかし、ここで生成されるコードは、一般的にスケルトンだけであり、実装コードは自分で書かなければなりません。
ECOは、これとは全く違ったアプローチをとります。ECOも、他のモデリングツールと同じようにUMLダイアグラムを作成します。しかし、大きく異なるのは、ECOは、ランタイムを提供するという点です。従来の方法では、モデルは設計時に存在するもので、コンパイルして実行するときには、そのモデルは失われています。一方、ECOでは、モデルを実行するランタイムによって、モデルレベルで定義した情報を自動的に実行します。

図1 ECOの概要
これにより、例えば、データベースデータをグリッドに表示するようなアプリケーションも、従来の手法であれば、TQueryなどのデータセットコンポーネントを使ってSQLデータベースにクエリーを投げ、その結果セットをバインディングしますが、ECOでは、オブジェクトのコレクションにバインディングするというモデル指向のアプローチになります。UIコンポーネントは、データオブジェクトに対してバインディングしますが、データオブジェクトの生成や永続化などの処理は、ECOのサービスによって自動化されるのです。
ECOでは、図を作成するところから始めます。Borland Developer Studioに搭載されたTogether機能を使用して、データモデルを作成します。このチュートリアルでは、図のようなデータモデルを持つ住所データを管理するアプリケーションを作成します。

図2 住所録のデータモデル
ECOアプリケーションの新規作成
まずはじめに、[ファイル|新規作成|その他]を選択し、「新規作成」ダイアログを表示します。ここで、左のツリーから[Delphi for .NET Projects]をクリック(C#で開発したい人は、[C# Projects))し、典型的なECOアプリケーションの雛型となる[ECO WinFormsアプリケーション]を選択します。

図3 新規作成
表示される「アプリケーションの新規作成」ダイアログで、[名前]にFirstECOAppと指定します。

図4 アプリケーションの新規作成
Borland Developer Studioは、ECOアプリケーションに必要な雛型を作成します。

図5 新規に作成されたECOアプリケーションプロジェクト
ここには注目すべき2つのファイルがあります。
FirstECOAppEcoSpace.pasは、ECO空間(ECO Space)と呼ばれる、作成したオブジェクトを実行、管理するためのコンテナです。ECO空間の重要な機能のひとつが、永続化のサポートです。ECOの機能を使えば、モデルを作成するだけで、データベースに簡単に永続化させることができるのです。
Package_1Unit.pasは、空のUMLパッケージです。ここに、ECOアプリケーションのためのクラスを作成します。複雑なアプリケーションでは、複数のパッケージを作成します。
ECOモデルの作成
ECOモデルを作成するには、Togetherのクラス図およびOCL(Object Constraint Language)を使います。以下の手順で、クラスダイアグラムビューを表示します。
・画面右のプロジェクトマネージャ下部に表示された[モデルビュー]タブをクリックする
・モデルビューツリーから[Package_1]を開き、子項目の[Package_1]をダブルクリックします。

図6 クラスダイアグラムビューの表示
ここで、以下の手順により新規クラスを作成します。
・ツールパレットで[ECOクラス]を選択して、クラスダイアグラムビュー上をクリックする
・作成された新規クラスの名前を Contact に設定する

図7 新規クラスの作成
新規ECOクラスContactに、属性を追加します。クラスダイアグラムビュー上で作成したクラスを選択し、マウスの右ボタンをクリックします。表示されたメニューで[追加|属性]を選択します。新規属性が追加されるので、ここに、name:String と入力します。

図8 新規属性の追加
属性の情報は、オブジェクトインスペクタを使っても編集できます。ビューで選択した属性の情報は、画面左下のオブジェクトインスペクタに表示されています。

図9 オブジェクトインスペクタ
さらに、同じ手順で以下の3つのプロパティも追加します。
address: String
phone: String
email: String
Contactからは、具体的なクラスとしてCustomer、Employeeを導出します。個人または会社のコンタクトを共通のクラスContactを継承して作ります。次の手順で、この関係を定義します。
・ツールパレットで[ECOクラス]を選択して、クラスダイアグラムビュー上をクリックする
・作成された新規クラスの名前を Customer に設定する
・同じ手順で新規クラス Employee を作成する
・ツールパレットで[汎化/実装]を選択する
・クラスダイアグラムビューのCustomerクラス上でマウスボタンを押し、そのままContactクラス上までドラッグして線を引き、マウスボタンを離す
・同じ要領で、EmployeeクラスとContract間でも、線を引く。

図10 汎化/実装の定義
この結果、次のようなダイアグラムが完成します。

図11 クラスダイアグラム
この一連の操作によって、ECOは、モデルの実装コードを生成しています。Package_1Unitの下には、定義した各クラスに対する実装クラスが作成されています。

図12 生成された実装クラス
ユーザーインターフェースの作成
作成したモデルを表示するユーザーインターフェースを作成します。ECOのランタイムは、.NETリフレクションを使ってクラスの情報を取得します。そのため、設計時にユーザーインターフェースがECOクラスの情報を利用できるように、あらかじめ作成したモデルをコンパイルしておきます。
ユーザーインターフェースは、図のようなシンプルなテスト用のフォームです。CustomerとEmployeeを追加するボタンと、その内容を表示するためのグリッド、さらに、親クラスであるContactを表示するグリッドも追加します。

図13 作成するユーザーインターフェース
・WinForm.pasを表示し、[デザイン]タブをクリックする
・ツールパレットの[Windows Forms]カテゴリーからButtonを2つ配置する
・ツールパレットの[Data Controls]カテゴリーからDataGridを3つ配置する
・ツールパレットの[Enterprise Core Objects]カテゴリーからExpressionHandlerを3つ配置する
それぞれについて、次のようにプロパティを設定します。
Button1
プロパティ |
値 |
Name |
btnAddCustomer |
Text |
Add Customer |
|
|
Button2
プロパティ |
値 |
Name |
btnAddEmployee |
Text |
Add Employee |
|
|
ExpressionHandle1
プロパティ |
値 |
Name |
ehContracts |
RootHandler |
rhRoot |
Expression |
Contract.allinstances |
|
|
ExpressionHandle2
プロパティ |
値 |
Name |
ehCustomers |
RootHandler |
rhRoot |
Expression |
Customer.allinstances |
|
|
ExpressionHandle3
プロパティ |
値 |
Name |
ehEmployees |
RootHandler |
rhRoot |
Expression |
Employee.allinstances |
|
|
DataGrid1
プロパティ |
値 |
Name |
dgContracts |
DataSource |
ehContracts |
|
|
DataGrid2
プロパティ |
値 |
Name |
dgCustomers |
DataSource |
ehCustomers |
|
|
DataGrid3
プロパティ |
値 |
Name |
dgEmployees |
DataSource |
ehEmployees |
|
|
次に,配置したボタンのOnClickイベントを設定します。
procedure TWinForm.btnAddCustomer_Click(sender: System.Object;
e: System.EventArgs);
begin
Customer.Create(EcoSpace);
end;
procedure TWinForm.btnAddEmployee_Click(sender: System.Object;
e: System.EventArgs);
begin
Employee.Create(EcoSpace);
end;
ここに記載したコードに代わる手段として、ECO Listアクションを使うこともできます。ボタンに対して以下のようなプロパティを設定すれば、追加のアクションが実行されます。
btnAddCustomer
プロパティ |
値 |
EcoListActionsのBindingContext |
dgCustomers |
EcoListActionsのEcoListAction |
Add |
EcoListActionsのRootHandle |
ehCustomers |
|
|
btnAddEmployee
プロパティ |
値 |
EcoListActionsのBindingContext |
dgEmployees |
EcoListActionsのEcoListAction |
Add |
EcoListActionsのRootHandle |
ehEmployees |
|
|
アプリケーションの実行
ここまでで、実行可能なアプリケーションを作成することができました。実行ボタンをクリックして、表示されたフォームで動作を確認してください。

図14 アプリケーションの実行
データの永続化
このままでは、アプリケーションを終了させると、追加した情報は失われてしまいます。ECOでは、XMLファイルまたはRDBMSにデータを保管することができます。使用できる永続化の方法は製品エディションによって異なりますので、ここでは、すべてのエディションで共通して使用できるXMLファイルへの格納方法を説明します。
データの永続化は、ECO空間に定義します。次の手順で、XMLファイルへの永続化を定義します。
・プロジェクトマネージャの[FirstECOApp.bdsproj]をクリックし、プロジェクトマネージャのツリーを表示する
・[FirstECOAppEcoSpace.pas]をダブルクリックして、ソースコードを表示する
・画面下の[デザイン]タブをクリックする
・ツールパレットの[Enterprise Core Objects]カテゴリーからpersistenceMapperXMLを配置する
・配置したコンポーネントのプロパティを次のように設定する
persistenceMapperXML1
プロパティ |
値 |
FileName |
data.xml |
|
|
フォームにデータの保存を実行する[Save]ボタンを配置し、OnClickイベントを次のように設定します。
procedure TWinForm.btnSave_Click(sender: System.Object;
e: System.EventArgs);
begin
FEcoSpace.UpdateDatabase;
end;
以上で、データはXMLファイルに保管されるようになります。
また、追加のときと同じように、コードを記述することなく、ボタンに対するプロパティとしても定義できます。
btnSave
プロパティ |
値 |
EcoGlobalActionsのEcoAction |
UpdateDatabase |
|
|
この方法を用いれば、データの変更がない場合には、ボタンが無効になるなどの処理が自動的に追加されます。
以上、簡単にECOの基本機能を見てきましたが、ECOにはこのほかにもさまざまな特筆すべき機能があります。例えば、作成したEmployeeクラスにdept属性を追加してみてください。その結果は、データモデルのみならず、ユーザーインターフェースにも反映されていることを発見できるはずです。
さらに、最新バージョンのECO IIIでは、ステートチャート図によるロジックの実装をサポートしています(Architect版のみ)。承認プロセスのような複雑なビジネスロジックも、ステートチャートで記述するだけで、コーディングを一切することなく動作させることができます。
ECOのモデルドリブン開発機能は、モデリングからランタイムまで一貫したフレームワークによってサポートされており、開発者は最小の労力で変化に強い.NETアプリケーションを開発できます。このモデル資産は、.NETのさまざまなアプリケーション形態(WinForms、ASP.NET、Webサービス、モバイルなど)で利用することができます。

|
ECOのチュートリアルレッスンは、9月7日に開催される第2回デベロッパーキャンプでもお届けする予定です。参加費は無料です。ふるってご参加ください。 |
|
|
Connect with Us