Borland Developer Studio 2006に搭載されたモデルドリブン開発フレームワーク "ECO" の概要

By: Hitoshi Fujii

Abstract: ECO(Enterprise Core Objects)は、Borland Developer Studioに搭載された先進のモデルドリブン開発フレームワークです。データモデルとリレーションのビジュアル定義により、データベースの作成やマッピ ング、永続化、ユーザーインターフェースとの連携などを、特別なコーディングなしで実装でき、メンテナンス性の高いアプリケーションをすばやく開発できます。


※この文書は、第1回ボーランドデベロッパーキャンプのテクノロジープレビュー「Borland Developer Studio 2006に搭載されたモデルドリブン開発フレームワーク "ECO" の概要」の講演内容をベースにチュートリアルを再構成して執筆しています。

    ECOとは

ECO(Enterprise Core Objects)は、Delphi 8およびC#Builderから搭載された新しいモデルドリブン開発のフレームワークです。Borland Developer Studio 2006では、すべてのエディションにECOの基本機能が搭載されており、容易にこの先進の開発機能を試すことができます。

従来のモデリングツールによる開発では、UMLを使ってシステムのアーキテクチャを設計していきます。最終的にクラスダイアグラムによって、システムの詳細な設計が記述されますが、ここで多くのツールでは、[コードの生成]メニューによってクラスダイアグラムからコードを生成します。しかし、ここで生成されるコードは、一般的にスケルトンだけであり、実装コードは自分で書かなければなりません。

ECOは、これとは全く違ったアプローチをとります。ECOも、他のモデリングツールと同じようにUMLダイアグラムを作成します。しかし、大きく異なるのは、ECOは、ランタイムを提供するという点です。従来の方法では、モデルは設計時に存在するもので、コンパイルして実行するときには、そのモデルは失われています。一方、ECOでは、モデルを実行するランタイムによって、モデルレベルで定義した情報を自動的に実行します。

Hide image
eco_image

図1 ECOの概要

これにより、例えば、データベースデータをグリッドに表示するようなアプリケーションも、従来の手法であれば、TQueryなどのデータセットコンポーネントを使ってSQLデータベースにクエリーを投げ、その結果セットをバインディングしますが、ECOでは、オブジェクトのコレクションにバインディングするというモデル指向のアプローチになります。UIコンポーネントは、データオブジェクトに対してバインディングしますが、データオブジェクトの生成や永続化などの処理は、ECOのサービスによって自動化されるのです。

    ECOチュートリアル

ECOでは、図を作成するところから始めます。Borland Developer Studioに搭載されたTogether機能を使用して、データモデルを作成します。このチュートリアルでは、図のようなデータモデルを持つ住所データを管理するアプリケーションを作成します。

Hide image
eco_fig2

図2 住所録のデータモデル

    ECOアプリケーションの新規作成

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

Hide image
eco_fig3

図3 新規作成

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

Hide image
eco_fig4

図4 アプリケーションの新規作成

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

Hide image
eco_fig5

図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]をダブルクリックします。

Hide image
eco_fig6

図6 クラスダイアグラムビューの表示

ここで、以下の手順により新規クラスを作成します。

・ツールパレットで[ECOクラス]を選択して、クラスダイアグラムビュー上をクリックする

・作成された新規クラスの名前を Contact に設定する

Hide image
eco_fig7

図7 新規クラスの作成

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

Hide image
eco_fig8

図8 新規属性の追加


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

Hide image
eco_fig9

図9 オブジェクトインスペクタ


さらに、同じ手順で以下の3つのプロパティも追加します。

address: String

phone: String

email: String

Contactからは、具体的なクラスとしてCustomer、Employeeを導出します。個人または会社のコンタクトを共通のクラスContactを継承して作ります。次の手順で、この関係を定義します。

・ツールパレットで[ECOクラス]を選択して、クラスダイアグラムビュー上をクリックする

・作成された新規クラスの名前を Customer に設定する

・同じ手順で新規クラス Employee を作成する

・ツールパレットで[汎化/実装]を選択する

・クラスダイアグラムビューのCustomerクラス上でマウスボタンを押し、そのままContactクラス上までドラッグして線を引き、マウスボタンを離す

・同じ要領で、EmployeeクラスとContract間でも、線を引く。

Hide image
eco_fig10

図10 汎化/実装の定義

この結果、次のようなダイアグラムが完成します。

Hide image
eco_fig11

図11 クラスダイアグラム

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

Hide image
eco_fig12

図12 生成された実装クラス

    ユーザーインターフェースの作成

作成したモデルを表示するユーザーインターフェースを作成します。ECOのランタイムは、.NETリフレクションを使ってクラスの情報を取得します。そのため、設計時にユーザーインターフェースがECOクラスの情報を利用できるように、あらかじめ作成したモデルをコンパイルしておきます

ユーザーインターフェースは、図のようなシンプルなテスト用のフォームです。CustomerとEmployeeを追加するボタンと、その内容を表示するためのグリッド、さらに、親クラスであるContactを表示するグリッドも追加します。

Hide image
eco_fig13

図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

    アプリケーションの実行

ここまでで、実行可能なアプリケーションを作成することができました。実行ボタンをクリックして、表示されたフォームで動作を確認してください。

Hide image
eco_fig14

図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サービス、モバイルなど)で利用することができます。

Hide image
devcamp256

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


Server Response from: SC3