データモデルクラス
ORDA を使用して、データモデル上に高レベルクラス関数を作成することができます。 これによってビジネス指向のコードを書き、APIのように "公開" することができます。 データストア、データクラス、エンティティ、およびエンティティセレクションはそれぞれ、関数を持つことのできるクラスオブジェクトとして提供されています。
たとえば、選択中の社員より給与の高い社員一覧を返す getNextWithHigherSalary()
関数を EmployeeEntity
クラスに作成したとします。 この関数は簡単に呼び出すことができます:
$nextHigh:=ds.Employee.get(1).getNextWithHigherSalary()
これらの関数はローカルデータストアだけでなく、クライアント/サーバーやリモートアーキテクチャーでも使用することができます:
//$cityManager はリモートデータストアへの参照です
Form.comp.city:=$cityManager.City.getCityName(Form.comp.zipcode)
この機能により、4D アプルケーションのビジネスロジックをまるごと独立したレイヤーに保存し、高レベルのセキュリティで簡単に管理・利用することができます:
-
わかりやすく使いやすい関数のみを公開し、その裏にある構造の複雑性を "隠す" ことができます。
-
構造が発展した場合には影響を受ける関数を適応させるだけで、クライアントアプリケーションは引き続き透過的にそれらを呼び出すことができます。
-
デフォルトでは、データモデルク ラス関数 (計算属性関数 含む) および エイリアス属性 はすべて、リモートアプリケーションに対して 非公開 に設定されており、RESTリクエストで呼び出すことはできません。 公開する関数やエイリアスは
exposed
キーワードによって明示的に宣言する必要があります。
各データモデルオブジェクトに関わるクラスは、4D によって あらかじめ自動的に作成 されます。
アーキテクチャー
ORDA では、4D
クラスストア を介して公開される 汎用クラス と、cs
クラスストア で公開される ユーザークラス が提供されています:
ORDA データモデルクラスはすべて cs
クラ スストアのプロパティとして公開されます。 次の ORDA クラスが提供されています:
クラス | 例 | 次によってインスタンス化されます |
---|---|---|
cs.DataStore | cs.DataStore | ds command |
cs.DataClassName | cs.Employee | dataStore.DataClassName , dataStore["DataClassName"] |
cs.DataClassNameEntity | cs.EmployeeEntity | dataClass.get() , dataClass.new() , entitySelection.first() , entitySelection.last() , entity.previous() , entity.next() , entity.first() , entity.last() , entity.clone() |
cs.DataClassNameSelection | cs.EmployeeSelection | dataClass.query() , entitySelection.query() , dataClass.all() , dataClass.fromCollection() , dataClass.newSelection() , entitySelection.drop() , entity.getSelection() , entitySelection.and() , entitySelection.minus() , entitySelection.or() , entitySelection.orderBy() , entitySelection.orderByFormula() , entitySelection.slice() , Create entity selection |
ORDA ユーザークラスは通常のクラスファイル (.4dm) としてプロジェクトの Classes サブフォルダーに保存されます (後述参照)。
ORDA データモデルユーザークラスのオブジェクトインスタンスは、それらの親クラスのプロパティや関数を使うことができます:
- Datastore クラスオブジェクトは、ORDA Datastore 汎用クラス の関数を呼び出すことができます。
- DataClass クラスオブジェクトは、ORDA DataClass 汎用クラス の関数を呼び出すことができます。
- EntitySelection クラスオブジェクトは ORDA EntitySelection 汎用クラス の関数を呼び出すことができます。
- Entity クラスオブジェクトは ORDA Entity 汎用クラス の関数を呼び出すことができます。