連載

アプリケーション・アーキテクチャ設計入門

第3回 論理アーキテクチャを構成するコンポーネントの設計(ビジネス/データ層編)

日本ユニシス 猪股 健太郎
2003/10/25

Page1 Page2 Page3

■サービス・インターフェイス

 ビジネス・ロジックをサービスとして外部に公開する場合に、サービス利用者との契約に基づいた各種規約をカプセル化するのが「サービス・インターフェイス」だ。

特徴

  • ビジネス・コンポーネントの“ファサード”(アクセスの窓口)となる

  • ビジネス・ロジックを実装しない

  • サービスと通信とのマッピングを担当し、通信のポリシーを実現する

  • 公開するメソッドは、個々に独立して呼び出される場合もあれば、順番に呼び出される場合もある

  • サービス・インターフェイス自身のセキュリティ・アイデンティティを持ってもよい

  • トランザクションをサポートするトランスポート(メッセージ・キューなど)を利用してもよいし、トランザクションをサポートしないトランスポート(HTTP経由のXML Webサービスなど)を利用してもよい

 

役割

 サービス・インターフェイスは以下のことを実現するために使用する。

  • ビジネス・コンポーネントを呼び出す

  • 入出力をキャッシュする

  • 通信プロトコルを実装する

  • データ・フォーマットやスキーマを変換する

 

推奨

  • サービス・インターフェイスがアプリケーションのセキュリティ境界(認証が必要となる場所)になるようにする

  • サービス・インターフェイスが企業外に向けて公開されるならば、内部実装の変更がインターフェイスに影響しないような設計にする

  • 同じビジネス機能に対し、異なる通信チャネル、メッセージ・フォーマット、認証メカニズム、サービス・レベルを定義したサービス・インターフェイスを複数作成することもあり得る

  • できるかぎり業界標準に準拠し、相互運用性を最大限維持するように設計する

■ビジネス・エンティティ

 「ビジネス・エンティティ」は、「商品」や「注文」などのように、ビジネスに関係するデータを抽象化したコンポーネントである。

 ビジネスに関係する情報は、一般的にデータアクセス・ロジック・コンポーネントを通してデータ・ストアに保存したりデータ・ストアから取り出したりする。その際のフォーマットは、XMLやDataSetのようなデータ中心的な形式だったり、RDBMSにマッピングしたオブジェクトだったりと、いろいろなバリエーションが考えられる。多くの場合ではXMLやDataSetを利用する方が適している。

 ビジネス機能ではトランザクションという概念が重要だが、これは典型的にはステートレスなドキュメント交換の観点で表現されるもので、オブジェクト指向のようなステートフルなモデルは必ずしも必要とされない。従って、内部ビジネス・データのすべてにアクセスでき、レイヤ間でデータを受け渡しするための特別なコードが必要ないデータ形式の方が、実装が単純になることが多いのである。しかし、ほかのアプリケーション・コンポーネントによる内部ビジネス・データの操作を制限したい何らかの事情があれば、データの内部表現を抽象化するためにビジネス・エンティティ・コンポーネントを作成する。

特徴

  • データ・ストアに格納されているビジネス・データのスナップショットである

  • データ・ストアに格納されているビジネス・データとは同期をとらない

  • あるトランザクション・コンテキストで読み出されたときに一貫性が保証される

  • トランザクションに透過的である。トランザクションを開始したり、トランザクションに参加したり投票したりしない

  • オブジェクト指向のモデルと処理中心のモデルとの連携を単純化する

  • ユーザー・インターフェイス・コンポーネント、ユーザー・プロセス・コンポーネント、ビジネス・コンポーネントから呼び出される

  • エンティティを保存するためにシリアライズ可能にしてもよい

 

役割

 ビジネス・エンティティ・コンポーネントは以下のことを実現する。

  • Load、Save、IsDirty、Validateなど、エンティティを管理するためのコントロール機能を提供する

  • データが更新されたときにイベントを起こす

 ビジネス・エンティティ・コンポーネントは以下のようなインターフェイスを公開する。

  • プロパティへのアクセス・メソッド

  • エンティティに関係づいたデータの集合へのアクセス・メソッド

  • データ定義など、エンティティのメタデータへのアクセス・メソッド

  • ビジネス処理を実行したり、ビジネス・データを取得したりするメソッド

  • エンティティを管理するためのコントロール・メソッド

  • ユーザー・インターフェイスでのデータ連結に必要なメソッドやインターフェイス

 

推奨

  • ビジネス・エンティティ・コンポーネントを作成する必要があるのかを検討する。ビジネス・エンティティ・コンポーネントの開発は簡単な作業ではない

  • ビジネス・エンティティ・コンポーネントに共通する処理をカプセル化したベースクラスを継承する

  • データ集合の内部表現にはDataSetやXMLを使う

  • エンティティのコントロール機能やメタデータへのアクセス・メソッドなど、ビジネス・エンティティ・コンポーネントに共通するインターフェイスを独立して定義する

  • データの検証ルールはメタデータとして独立させるが、ビジネス・エンティティ・コンポーネントを呼び出す側からは検証ルールを変更できないようにする

  • 注文エンティティに注文明細行の最大数を持たせるなど、データとビジネス・ルールとを関連付けられるようにする

  • データ・ストアとのやりとりにはデータアクセス・ロジック・コンポーネントを使う

 

 INDEX
  [連載] アプリケーション・アーキテクチャ設計入門
  第3回 論理アーキテクチャを構成するコンポーネントの設計(ビジネス/データ層編)
    1.ビジネス層コンポーネントの設計(1)
  2.ビジネス層コンポーネントの設計(2)
    3.データ層コンポーネントの設計
 
インデックス・ページヘ  「アプリケーション・アーキテクチャ設計入門」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間