連載

アプリケーション・アーキテクチャ設計入門
―― Application Architecture for .NETに学ぶ.NETシステム設計 ――

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

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


Back Issue
1
.NET開発者のための設計ガイドライン
2
論理アーキテクチャを構成するコンポーネントの設計(プレゼンテーション層編)

 前回では、Application Architecture for .NET(以下AAfN)で推奨されている論理アーキテクチャから、プレゼンテーション層を構成する2つのコンポーネントについて、その設計指針について解説した。

 
Application Architecture for .NETで推奨されている論理アーキテクチャ(再掲)
3つの論理階層(レイヤ)とそれらに属する8種類のコンポーネント、そして論理階層(レイヤ)に属さないコンポーネント群から構成されている。

 今回はビジネス層とデータ層に含まれる5つのコンポーネントの設計指針について引き続き見ていく。

ビジネス層

■ビジネス・コンポーネント

 ビジネス・ルールを実装してビジネス処理を実行するコンポーネントが「ビジネス・コンポーネント」である。

 ビジネス・コンポーネントは、上位レイヤのユーザー・プロセス・コンポーネントや、サービス・インターフェイス、ビジネス・ワークフロー、およびほかのビジネス・コンポーネントから、ビジネス・データをパラメータとして呼び出される。

特徴

  • ビジネス・ルールを実装してデータ構造を受け渡しする

  • 必要とするデータ・ストアやサービスを抽象化する機能を公開する

  • 単一トランザクションを開始できる

  • 単一トランザクションのコンテキストで呼び出されたときは、必ずそのトランザクションに参加する

  • 単一トランザクションを実装できないときは、補償メソッド(業務上独立した取り消し処理のメソッド)*を用意してデータの一貫性を保つ

 
* 例えば「予約処理」の補償処理は「予約キャンセル処理」であるが、これはトランザクションのロールバックとは異なり、独立したビジネス処理である。従って「キャンセル手数料が発生する」といったビジネス上のルールが適用される場合もあり得る。
 

役割

 ビジネス・コンポーネントは以下のことを実現するために使用する。

  • 入出力を検証する

  • 公開するビジネス・プロセスの補償メソッドを公開する

  • アプリケーション・データを取得したり更新したりするためにデータアクセス・ロジック・コンポーネントを呼び出す

  • サービス・エージェントを通して外部のサービスを呼び出す

  • ほかのビジネス・コンポーネントを呼び出したり、ビジネス・ワークフローを開始したりする

  • 単一トランザクションで何か異常があったときに呼び出し元に例外を返す

 

推奨

  • できる限りメッセージ・ベースの通信を使用する

  • サービス・インターフェイスを通して公開するビジネス・プロセスは、同一のメッセージを繰り返し受信しても整合性を保つようにする

  • トランザクションのリトライや複合(複数のトランザクションを1つのトランザクションにまとめる)ができるようにトランザクション境界を選択する。メッセージ・ベースのシステムのためのリトライも考慮する

  • どのサービス利用者のコンテキストでも動作するようにし、偽装(認証された利用者IDの権限でアプリケーションが実行されるようにする仕組み)が必要ないようにする

  • 入力パラメータや出力値にはXMLやDataSetなどの一貫したデータ形式を使う

  • トランザクション分離レベルは適切に設定する

  • 異種トランザクションに参加するためにエンタープライズ・サービスの機能を使ってもよい

 ビジネス処理の実装では、さまざまなパターンが存在する。ここでは、マイクロソフトが提供する技術を使って実装することができる2つのパターンを紹介する。それは、PipelineパターンとEventパターンである。

 Pipelineパターンは、すべてのビジネス機能が順番に実行されるパターンである。ある処理の途中で外部サービスを非同期に呼び出す場合、その後の処理でサービスの戻り値が必要であれば待ち、必要でないなら次の処理に移る。このようなパターンを実装する場合は、Commerce Serverのビジネス・プロセス・パイプライン機能を利用できる。

 Eventパターンは、特定のビジネス状況をきっかけとして複数の処理が開始されるが、それらの処理は互いに独立していて戻り値が必要ないようなパターンである。このようなパターンを実装する場合は、COM+の疎結合イベント・サービスを利用できる。

 .NET Frameworkに用意されているエンタープライズ・サービスとしては、ロールベース・セキュリティ、異種トランザクション、オブジェクト・プーリング、キュー・コンポーネント、COM+イベントといったCOM+の機能を利用することができる。そのような機能がビジネス・コンポーネントに必要なのであれば、エンタープライズ・サービスを用いてビジネス・コンポーネントを実装することもできる。ただし、エンタープライズ・サービスにはリモート通信チャネル、厳密名での署名、デプロイメントなどに制限がある。後になってエンタープライズ・サービスを追加したり削除したりすることは難しいので、設計の初期段階で検討すべきである。

■ビジネス・ワークフロー

 あるビジネス・プロセスが、複数のサービスから構成されていたり、長期に及ぶトランザクションを複数必要とする場合は、複数のサービスとの会話状態を制御したり、メッセージを交換したりするためにワークフロー機能が必要になることもある。「ビジネス・ワークフロー」は、そのような長期に及ぶ多ステップのビジネス・プロセスを定義・調整するコンポーネントだ。

ビジネス・ワークフローの実装にはBizTalk Serverを利用することもできる。BizTalk Serverは、オーケストレーション・サービスとメッセージング・サービスの2つの機能を提供する。オーケストレーション・サービスは長期に及ぶビジネス・プロセスの状態を管理し、事前に実装しておいたビジネス処理を適切なタイミングで起動してくれる。メッセージング・サービスはさまざまな通信プロトコルやメッセージ形式に対応して各種サービスや外部アプリケーションとメッセージを交換する。

 AAfNでは、以下のような場合において、ビジネス・ワークフローの実装にBizTalk Serverを利用することを推奨している。

  • 複数のステップと長期に及ぶトランザクションからなるビジネス・プロセスを管理する場合

  • 外部のサービスとの会話や契約に基づいて実行されるビジネス・プロセスのインターフェイスを公開する場合

  • BizTalk Serverが提供する、さまざまな技術に接続するアダプタやコネクタを利用する場合

 BizTalk Serverを使った開発の詳細は、MSDNで公開されているドキュメントなどが参考になるだろう。


 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 記事ランキング

本日 月間