Windchill モデル化の実践
このセクションでは、Windchill クラスアーキテクチャの設計のためのバックグラウンドとモデル化に使用する方法を説明します。Windchill クラスアーキテクチャは、以下の目的を念頭に置いて設計されています。
• 3 階層アーキテクチャの特性 (クライアントレイヤーのプレゼンテーション、サーバーレイヤーのビジネスロジック、およびデータベースレイヤーの永続性) を反映するビジネスオブジェクトの開発を促進する。
• 最適なコードを生成できるモデルを確保する。生成されるコードは、オブジェクトの状態の管理、クライアントとサーバー間のオブジェクトの転送、およびデータベースでのオブジェクトの操作を行います。
• 値が追加できる開発環境を提供する。モデルの拡張や既存のオブジェクトへの新しい機能の追加を可能にします。
これらの目的を可能にするための 1 つの方法として、継承機能があります。
継承による機能
サブクラスを親クラスに追加すると (この場合、WTObject クラスを Item と DomainItem で拡張すると)、各先行クラスの属性とメソッドはサブクラスに継承されます。この方法は多くの場合に適用されます。ただし、継承する必要のある機能が少ない場合もあります。この場合、実際にオブジェクトに必要以上の機能を追加したとき、または必要なコードだけをコピーしてオブジェクトに追加したときに冗長性や潜在的な保守問題が生じます。
Windchill で実装しているもう 1 つの方法は、以下の図のように、機能をビジネス情報の維持が主な目的であるオブジェクト (認識側) とビジネス操作の実行が主な目的であるオブジェクト (実行側) に分割する方法です。
分割による機能
この方法を使用すると、ビジネスモデルには以下の 2 とおりの主要なクラスができます。ビジネス情報クラスとビジネスマネージャクラスです。
ビジネス情報クラスは、データベース内で管理と維持を行うビジネス情報と関連を示します。これらのクラスは、Windchill で提供される基礎クラスを拡張します。これらは、1 つまたは複数のビジネスマネージャインタフェースを実装します。これらのクラスは、データとともにクライアントとサーバーの間を行き来します。
ビジネスマネージャクラスは、ビジネス情報オブジェクトに適用されるビジネス規則を示します。これらのクラスは、Windchill StandardManager クラスを拡張します。ビジネスマネージャは、クライアント側の API をビジネスマネージャメソッドに提供するインタフェースクラスを実装します。ビジネスマネージャクラスのコードはサーバー上にあります。
以下の例は、Windchill が提供するマネージャの 1 つである LockService です (クラスを呼ぶ場合、マネージャはサービスとも呼ばれます)。
LockService の例
この例では、Lockable は、MyItem によって実装される "認識側" です (MyItem は抽象クラス Item の拡張も行います)。ロック可能なオブジェクト (MyItem を含む) は、StandardLockService ("実行側") によって、実装されているリモートインタフェース LockService が公開する API を使用して管理されます。
Item から継承する属性とメソッド以外に、MyItem には Lockable インタフェースで定義された機能もあります。
図の左側は、クライアントでサーバー側のサービスのインタフェースをモデル化する方法を示しています。実行側は StandardLockService で、サーバー上で実行されます。実行側は Windchill StandardManager から継承し、起動やシャットダウンなど通常のマネージャの標準的で基本的な操作を行います (独自のマネージャを設定した場合でも、StandardManager から継承できます)。
LockService インタフェースは、クライアントで使用可能なロックサービス、およびロックとロック解除を行います。これらのサービスは、クライアントからサーバーへリモートで起動されます。サーバーの StandardLockService には、実際にロックとロック解除メソッドをサポートするコードがすべて含まれています。
LockService の API は、ロック可能なオブジェクトのみを受け入れます。MyItem は、Lockable インタフェースを実装するので受け入れられます。同様に、Lockable インタフェースを実装するほかのビジネス情報クラスも受け入れられます。LockService 機能にアクセスするには、クラスを使用して Lockable インタフェースを実装する必要があります。