エンタープライズ.net アーキテクチャ設計編

68
http://biki.jp.net/enterprisenet エンタープライズ.NET アーキテクチャ設計編 システム全体構造の定義と技術選択

Upload: akihiro-ehara

Post on 08-Jul-2015

616 views

Category:

Technology


0 download

DESCRIPTION

アーキテクチャ設計編では、アプリケーション全体にわたる技術の選択や開発の方針を策定します。分析編で識別したエンティティやサービスを実際のプログラムに変換するための指針やコンポーネントを定義します

TRANSCRIPT

Page 1: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

エンタープライズ.NETアーキテクチャ設計編

システム全体構造の定義と技術選択

Page 2: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

アプリケーション設計で意識すべきポイント

アーキテクチャ設計では実際のアプリケーションの実装を視野に入れた指針。このため、実装上の制限を考慮した上で構造原理をパターン化し、どうリーズナブルにアプリケーションを構築するかを考えることが重要。

構造原理のパターン化

実装制限の考慮

リーズナブルな選択アプリケーションアーキテクチャ

アーキテクチャ設計

Page 3: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

アーキテクチャ設計

分析モデルから設計モデルへの変換の指針 アプリケーション・アーキテクチャは、どのように設計・実装する

かの指針であることから、分析(業務)モデルを設計・実装する際に利用されます

分析(業務)モデル

アプリケーションアーキテクチャ

設計モデル アプリケーション

設計 実装

Page 4: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

アーキテクチャ設計

アプリケーション全体にわたる技術の選択や開発の方針を策定

アーキテクチャ設計の主なタスク アーキテクチャ基本設計

アーキテクチャパターンの選定

処理パターンの類型化

コンポーネントの設計と配置

共通機能の抽出とアプリケーションブロック化

個別技術の検討

Page 5: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

アーキテクチャ基本設計

Page 6: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

アーキテクチャパターンの選定

アプリケーションのレイヤ構造および利用するコンポーネントタイプを決定します

Page 7: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

アーキテクチャパターンの選定

目的

アプリケーションのレイヤ構造および利用するコンポーネントタイプを決定します

タスク

レイヤ構造の分割

コンポーネントの分類

アウトプット

レイヤ・コンポーネントタイプの構造と説明

Page 8: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

レイヤ構造の分割

プレゼンテーションプレゼンテーション

ビジネスビジネス

データデータ

共通基盤

共通基盤

Data Sources

Services

ユーザー

Services

呼び出し

プレゼンテーションプレゼンテーション

ビジネスビジネス

データデータ

共通基盤

共通基盤

Data Sources

Services

ユーザー

Services

呼び出し

Page 9: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

レイヤ構造の分割

レイヤ 説明

プレゼンテーション プレゼンテーションレイヤでは、ユーザへのデータの表示や入力を受け付けるための機能が実装され、Web FormsやWindows Formsが主要な技術になります。

ビジネス ビジネスレイヤは、ビジネスルールやビジネスロジックの機能が実装され、トランザクションやデータ操作が主要な技術になります。また、プレゼンテーションレイヤや他システムにサービスを提供する機能が実装されます。

データ データレイヤは、RDBへのアクセスや他のサービスを利用する機能が実装されます。

共通基盤 共通基盤では上記の全てのレイヤで関連するセキュリティやログ、例外などの処理を提供します。アプリケーション開発キットに実装され提供されます。

Page 10: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

コンポーネントタイプ

Page 11: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

コンポーネントの分類

レイヤ コンポーネントタイプ 備考

プレゼンテーション

UIコンポーネント UIコンポーネントは分析モデルのUIを実装するコンポーネントです。分析モデルのUIごとに検討し最終的な画面、各種操作に対する処理を実装します。Windowsフォーム

Webフォーム

ビジネス サービスインタフェース サービスインタフェースは、他システムやスマートクライアントからのアクセスのためのビジネスロジックのインタフェースを提供する目的で利用します。他システム連携のための認証や特別な通信手順、データ検証などが実装されます。

XML Web サービス

ビジネスコンポーネント ビジネスコントローラは、分析時のビジネスロジックの処理を実装します。ビジネスファサードでは、ビジネスコントローラを利用しやすい機能単位への集約や、複数のサービスインタフェースで処理される共通処理を実装します。また、トランザクションの制御を行うトランザクション開始コンポーネントとしても利用されます

ビジネスファサード

ビジネスコントローラ

ビジネスエンティティ ビジネスエンティティは、分析クラスのデータを管理する中心的なクラスです。ビジネスエンティティは、データアクセスロジックコンポーネントで読み出されたデータやビジネスコンポーネントで処理される際の器として利用されます。さらに、レイヤ間で受け渡しのためのデータとしても利用されます。

Page 12: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

コンポーネントの分類

レイヤ コンポーネントタイプ 備考

データ データアクセスロジックコンポーネント

データアクセスロジックコンポーネントは、ビジネスロジックの永続化が必要なデータをデータベースに入出力するためのコンポーネントです。楽観ロック制御など複雑な永続化・読み出しをより高いレベルで抽象化する場合に活用します。

サービスエージェント サービスエージェントは、他システムのサービスを呼び出す際に利用します。サービスエージェントでは、他システム形式のデータを自システム形式すなわちビジネスエンティティに変換する機能を実装します。認証処理や特別な通信手順、データ検証などもサービスエージェントで実装されます。

Page 13: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

レイヤ構造の分割とコンポーネントの分類 サンプル

Page 14: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

アーキテクチャパターンの選定

よくある質問( FAQ )

全てのレイヤーコンポーネントタイプを利用するのですか?

個別のアプリケーションにおいて必要なもののみ利用します。アプリケーションの機能面・テクノロジ面、開発面等で抽象度が向上し変更や作業が局所化できるなどのメリットがあるかどうか考えます。

ビジネスファサードは省略しても良いか?

省略しないようにお勧めします。ビジネスファサードを構成しトランザクションの制御を担当させることで、ビジネスロジック処理が再利用し易くなるためです。

Page 15: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

処理パターンの類型化

アプリケーションのシーケンスを類似化し、典型的なシーケンスとして整理します

Page 16: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

処理パターンの類型化 目的

アプリケーションのシーケンスを類似化し、典型的なシーケンスとして整理します

タスク

アプリケーションの典型的な処理パターンの識別

典型的な処理パターンをシーケンスとして整理

主要なシーケンス 更新処理、検索処理

トランザクション制御(親子テーブル更新、読込後更新etc)

エラー処理、他システム連携

アウトプット

典型的な処理のシーケンス図とその説明

Page 17: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

処理パターンの類型化処理シーケンスを整理

:ブラウザ :ビジネスコントローラ :データベース:Webフォーム

更新処理

データ更新実行

データ更新

入力データ検証

SQL更新文実行

事前条件チェック

処理結果

処理結果表示

結果ページ表示

トランザクション処理

更新データ作成ビジネスエンティティ(型付DataSet)

:ビジネスファサード

データ更新

処理結果

各コンポーネントで行う処理(責務)を明確にします Web更新処理シーケンス例

コンポーネント

処理(メソッド)

Page 18: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

検索処理(Web)サンプル

: ブラウザ : ビジネスコントローラ : データベース: Webフォーム

検索処理

データ検索実行

データ検索

入力データ検証

DBデータ検索

事前条件チェック

ビジネスエンティティ構築

検索結果

検索結果表示

検索結果表示

ビジネスエンティティ( ) 型付DataSet

ビジネスエンティティ作成

: ビジネスファサード

データ検索

検索結果

: データアクセスロジック

SQL検索文実行

Page 19: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

更新処理(Web)サンプル

: ブラウザ : ビジネスコントローラ: データアクセス

ロジック: Webフォーム

更新処理

データ更新実行

データ更新

入力データ検証

DBデータ更新

事前条件チェック

処理結果

処理結果表示

結果ページ表示

トランザクション処理

更新データ作成ビジネスエンティティ( ) 型付DataSet

: ビジネスファサード

データ更新

処理結果

: データベース

SQL更新文実行

Page 20: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

アプリケーション例外処理(Web)サンプル

:ブラウザ :ビジネスファサード:Webフォーム

アプリケーション例外

処理実行

処理実行

入力データ検証

アプリケーション例外

エラー表示

エラー表示

:ビジネスコントローラ

事前条件チェック

処理実行

アプリケーション例外

Page 21: エンタープライズ.Net アーキテクチャ設計編

システム例外処理(Web)サンプル

:ブラウザ :ビジネスファサード:Webフォーム

システム例外処理実行

処理実行

入力データ検証

エラー(システム例外)エラー表示

エラーページを表示

Webフォームではハンドリングせずにエラーページに遷移する集約エラーハンドラーでイベントログを記録

Page 22: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

検索処理(Windows)サンプル

: Windowsフォーム : ビジネスコントローラ: XML Web サービス

検索処理

データ検索

入力データ検証

検索結果

検索結果表示

データ検索実行

データ検索

検索結果

DBデータ検索

事前条件チェック

ビジネスエンティティ構築

ビジネスエンティティ作成

ビジネスエンティティ( ) 型付DataSet

: ビジネスファサード

検索結果

データ検索

: データベース: データアクセスロジック

SQL検索文実行

Page 23: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

更新処理(Windows)サンプル

: Windowsフォーム : ビジネスコントローラ: XML Web サービス

更新処理

データ更新

入力データ検証

事前条件チェック

処理結果

処理結果表示

データ更新実行

データ更新

処理結果

更新データ作成

: ビジネスファサード

データ更新

処理結果

トランザクション処理

ビジネスエンティティ( ) 型付DataSet

: データアクセスロジック

DBデータ更新

: データベース

SQL更新文実行

Page 24: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

アプリケーション例外処理(Window)サンプル

:Windowsフォーム :ビジネスファサード:XML Web サービス

アプリケーション例外

処理実行

入力データ検証

エラー表示

処理実行

処理実行

アプリケーション例外

SOAPエラーに変換

SOAPエラー(アプリケーション例外)ビジネスロジック実行

時の例外ハンドリングで処理

:ビジネスコントローラ

事前条件チェック

処理実行

アプリケーション例外

Page 25: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

システム例外処理(Window)サンプル

:Windowsフォーム :ビジネスファサード:XML Web サービス

システム例外

処理実行

入力データ検証

処理実行

処理実行

エラー(システム例外)

SOAPエラーに変換

SOAPエラー(システム例外)

集約エラーハンドラ

アプリケーションで集約エラーハンドラを予め設定してく

Page 26: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

ファイルデータ受信処理(他システム連携 )サンプル

:他システム

:ビジネスファサード:サービスインタフェース

受信処理

受信ファイル

データ更新

自システム形式変換

他システム形式変換

データ検証ビジネスエンティティ(型付DataSet)への変換

:ファイル受信処理

受信処理

データタイプ判定

結果ファイル

Page 27: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

処理パターンの類型化

よくある質問( FAQ )その1

シーケンスに記述するオブジェクト(四角)には何を利用すれば良いか?

アーキテクチャパターンで識別したコンポーネントタイプや、処理の中で重要な役割を行う特定コンポーネント(認証サービス、親テーブルetc)を利用します

マスタメンテナンスなどの処理パターンも記述してよいか?

アプリケーション固有の処理パターンの記述も推奨します。処理パターンの分類・類型化の度合いが高いと、個々のアプリケーション設計品質のばらつきが少なくなるためです。

どの程度処理パターンを記述すればよいか?

基本処理パターンで記述されているパターンを目安に、検索、更新などの基本的な処理シーケンスは最低限記述するようにします。

Page 28: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

処理パターンの類型化

よくある質問( FAQ )その2

ユーザ操作の処理シーケンスも記述するのか?

具体的なユーザ操作については記述することは避けるようにします。共通的なユーザ操作の記述については共通UIレイアウトの補足などで記述するようにします。

シーケンスに記述するメソッド(処理)としてはどのようなものを記述すればよいか?

オブジェクト間の相互作用を表すもの、タイミングや順序性があるものを記述します。メソッド(処理)名は厳密なものにする必要はなく処理内容を一般化した名前を利用します。

また、処理パターンで識別されたメソッド(処理)は最終的には、共通部

品や処理テンプレートとして利用されることになります。このため、共通化やテンプレート化などが期待できる処理も記述するようにします。

Page 29: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

(参考)処理パターンカタログ

Web・Windowsアプリケーション 検索処理

更新処理

入力エラー処理

アプリケーション例外処理

システム例外処理

ユーザ認証処理

UI遷移処理

データベース

ビジネスコントローラ

Page 30: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

コンポーネントの設計と配置

アプリケーションの論理的なコンポーネント構成や物理的な配置構成を検討・定義します

Page 31: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

コンポーネントの設計と配置 目的

アプリケーションの論理的なコンポーネント構成や物理的な配置構成を検討・定義します

タスク

コンポーネント構成の定義

名前空間・ソリューション・プロジェクト構成の定義

配置モデルの定義

アウトプット

コンポーネント構成(パッケージ図、パッケージ一覧)

名前空間(名前空間一覧)

ソリューション・プロジェクト構成(ソリューション構成一覧、プロジェクト構成一覧)

配置モデル(配置図、アプリケーション動作設定一覧)

Page 32: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

コンポーネント構成の定義

設計モデルはもちろん、実装モデル・配置モデルにおいても利用しやすい単位に分割・集約します

コンポーネントの単位を検討する基準 機能的な分類(サブシステム、業務)

例) 販売業務パッケージ

コンポーネントの実装形態(レイヤ、テクノロジ)

例)データアクセスロジックパッケージ

サブシステム分割 複数の開発チームで並行して開発を行い易くなる

サブシステム間の依存を最小限にする設計が重要

共通サブシステムの導入などを検討

Page 33: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

コンポーネント構成の定義

サブシステム分割の例

ビジネス

プレゼンテーション

Webフォーム

ビジネスコントローラ

ビジネスエンティティ

共通ライブラリ

Sub1サブシステム共通サブシステム

バッチ処理サービス

ビジネスロジック

ビジネスコントローラ

ビジネスエンティティ

ビジネス

プレゼンテーション

Webフォーム

Sub2サブシステム

Abc連携処理サービス

ビジネスロジック

ビジネスコントローラ

ビジネスエンティティ

ビジネスロジック

Page 34: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

データ

ビジネス

データベース

プレゼンテーション

Webフォーム Windowsフォーム

XML Web サービス

ビジネスファサード

ビジネスコントローラ

共通ライブラリ

XYZサービス

データアクセスロジックコンポーネント

ビジネスエンティティ

ビジネスロジック

コンポーネント構成の定義サンプル

Page 35: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

コンポーネント構成の定義サンプル

パッケージ 説明

共通ライブラリ 共通機能です。たとえば、汎用的なログ出力やデータアクセスなどがあります

Webフォーム Webフォームの表示や入力処理を行うためのユーザインタフェースを提供します

Windowsフォーム Windowsフォームの表示や入力処理を行うためのユーザインタフェースを提供します

XML Webサービス Windowsスマートクライアントから呼び出されるXML Webサービスをビジネスロジックロジックのコンポーネントに中継するコンポーネントです

Xyzサービス Xyzシステムとの連携機能を提供します。

ビジネスファサード ビジネスファサードは、ビジネスコントローラを機能単位にまとめます。また、トランザクションの制御も行います。

ビジネスコントローラ ビジネスロジックの処理を実装する中心的なコンポーネントです。データの整合性の検証、ビジネスルールの実行、データアクセスのコントロールを行います。

ビジネスエンティティ クライアント-ビジネスロジック間で送受信するデータ構造を定義します。基本的に型付DataSetとして実装します。

データアクセスロジックコンポーネント

データベースへのアクセスを行います。SQL文の組み立てと実行を行います。

Page 36: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

名前空間・ソリューション・プロジェクト構成の定義

コンポーネント構成で定義されたパッケージに名前空間を与え、ソリューション・プロジェクトを定義します。

定義したパッケージごとに名前空間を与える ネストしているパッケージは上位の名前空間に追加する形態で命名

開発単位であるソリューションはサブシステムごとに作成

サブシステムの分割単位が小さい場合は、複数のサブシステムを1つのソリューションとして作成し、できるだけソリューションの数は減らすようにします。できれば、1つのソリューションとして作成することで、開発環境を簡略化できます。

配置単位(アセンブリ)であるプロジェクト構成は名前空間ごとに作成 「名前空間=プロジェクト名=アセンブリ名」となり管理が容易

複数の名前空間を1つのプロジェクトで管理する場合は、プロジェクト名としては、最も上位の名前空間を利用し、名前空間に合わせてプロジェクト内にサブフォルダを作成するようにします

サブパッケージの名前空間を定義せずに上位のパッケージの名前空間をそのまま利用することもある

Page 37: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

名前空間の定義サンプル

システム 名前空間

システム名 MyCompany.XSystem

サブシステム パッケージ 名前空間

(共通) 共通WebフォームWindowsフォームXYZサービスXML Webサービスビジネスロジックビジネスエンティティデータアクセスロジック

MyCompany.XSystemMyCompany.XSystem.WebUIMyCompany.XSystem.WinUIMyCompany.XSystem.XyzServiceMyCompany.XSystem.WebServiceMyCompany.XSystem.BusinessLogicMyCompany.XSystem.BusinessEntityMyCompany.XSystem.DbAccess

Page 38: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

ソリューション・プロジェクト構成の定義サンプル

サブシステムソリューション名

(共通) XSystem

サブシステムパッケージ プロジェクト名

(共通) 共通WebフォームWindowsフォームXYZサービスXML Webサービスビジネスロジックビジネスエンティティデータアクセスロジック

MyCompany.XSystemMyCompany.XSystem.WebUIMyCompany.XSystem.WinUIMyCompany.XSystem.XyzServiceMyCompany.XSystem.WebServiceMyCompany.XSystem.BusinessLogicMyCompany.XSystem.BusinessEntityMyCompany.XSystem.DbAccess

Page 39: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

配置モデルの定義 コンポーネントの物理的な配置を定義します

コンポーネントの配置 実行ファイル(EXE、DLL)として検討したパッケージを物理的な

ノード(マシン)にマップ

さらに、利用するプロダクトや通信プロトコル、主要なソフトウエアの構成設定(アプリケーションを動作させるための設定やプロセスの動作アカウントなど)の情報を規定

セキュリティやパフォーマンスの観点が重要 プロセスやマシンをまたがる処理の注意

認証などのセキュリティ処理が必要になることが多い

通信オーバーヘッドが大きくなる 通信頻度やデータ量が大きくなる場合には対策が必要

Page 40: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

クライアント

Webサーバー

ビジネスロジック<<DLL>>

データベースサーバー

データベース<<Package>>

TCP/IP

Webフォーム<<ASPX>>

HTTP

ブラウザ<<Package>>

共通ライブラリ<<DLL>>

Windowsフォーム<<DLL>>

共通ライブラリ<<DLL>>

クライアントダウンロードパッケージ

クライアントダウンロードパッケージ

ダウンロード

ビジネスエンティティ<<DLL>>

ビジネスエンティティ<<DLL>>

XML WebサービスXYZサービス

データアクセスロジックコンポーネント

<<DLL>>

サンプル アプリケーション

配置モデルの定義

Page 41: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

アプリケーション動作設定一覧サンプル

設定項目 内容

Webサーバー XML Webサービスの認証方式はWindows認証を利用しますWebアプリケーションの認証方式はフォーム認証を利用します許可制御はURL制御を利用します動作アカウントはドメインで利用可能なAbcRuntimeUserを利用しますログインフォームのみSSLを利用します

データベースサーバー

SQL Server認証を利用し、許可制御は利用しません。ローカルシステムアカウントを動作アカウントとして利用します。

ドメインサーバー

アプリケーション動作アカウント AbcRuntimeUserを作成します

FW 利用しません

クラスタ(NLBS/MSCS)

利用しません

Page 42: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

コンポーネントの設計と配置

よくある質問( FAQ )

フォルダ構成やソース管理リポジトリの構造はどのようすればよいか ソリューションおよびプロジェクトのフォルダ構成は、ソリューションごとに検

討を行い、開発用のフォルダの直下にソリューション用のフォルダを構成します。さらにプロジェクト用のフォルダをサブフォルダとして構成します。ソリューションのフォルダ名はソリューション名を利用し、プロジェクトフォルダ名は、プロジェクト名を利用します。なお、各プロジェクトで機能やコンポーネントタイプごとのグルーピングを行う場合、プロジェクトにサブフォルダを作成し利用してもかまいません。なお、ソース管理リポジトリを利用する場合は開発用のフォルダ構成とソース管理リポジトリの階層構造が同一になるように構成します。

配置モデルのかわりにネットワーク・マシン構成図を利用してよいか? 利用してかまいません。この場合、論理的なコンポーネントをどのように

マッピングされるかの情報を付与するようにします。

Page 43: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

共通機能の抽出とアプリケーションブロック化

アプリケーション全体で利用される共通機能を抽出し、アプリケーションブロック(共通部品)として実装を行います

Page 44: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

共通機能の抽出とアプリケーションブロック化

目的 アプリケーション全体で利用される共通機能を抽出し、アプリ

ケーションブロック(共通部品)として実装を行います

タスク 共通機能の抽出

処理パターンの類型化や個別共通機能のアウトプットを参考

アプリケーション非固有、アプリケーション固有の観点

アウトプット 共通機能の一覧

(実装・テストされたアプリケーション開発キット)

Page 45: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

共通機能の一覧サンプル

共通機能 内容

エラー(例外)制御 アプリケーション例外の定義やビジネスロジックエラーチェック、エラーメッセージの管理などを行います。

ログ出力 監査・デバッグなどのログ出力を行います。

データアクセス データベースへの検索・更新・トランザクション処理を行います。

入力検証 UI入力データチェックを行います。

画面遷移 フォームやページの遷移を行います。

セッション管理 複数のフォームやページで共有するデータを管理します。

セキュリティ ユーザ認証や許可制御を行います。

共通UIレイアウト 全てのUIで共通なレイアウトを提供します。

Page 46: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

共通機能の抽出とアプリケーションブロック化

よくある質問( FAQ )

典型的な共通機能にはどのようなものがあるか?

ログ出力、データベースアクセスなど個別のアプリケーションに依存しないアプリケーション非固有の共通機能として識別された機能は、他のアプリケーションでも共通機能として利用できる可能性が高いです。

業務依存の共通機能の抽出はどのようにするのか

分析モデルで識別したエンティティや、ビジネスルールの中で汎用的なものが候補

国際通貨型、業務カレンダー

消費税計算処理

Page 47: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

個別技術の検討

技術ごとに設計・実装方法の方針を検討し利用する技術を絞り込みます。

Page 48: エンタープライズ.Net アーキテクチャ設計編

個別技術の検討

目的

技術ごとに設計・実装方法の方針を検討し利用する技術を絞り込みます

タスク(検討項目) データベース実装

データアクセス

トランザクション

サービス

ユーザインタフェース

ユーザインタフェース制御

アウトプット 個別技術指針

セッション制御

セキュリティ

例外(エラー)ハンドリング

ログ出力

バッチ処理

Page 49: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

データベース実装

検討項目 内容

非正規化の指針 非正規化を行う指針を規定します。

Date、Time型の利用 文字列による代用の有無、利用基準を規定します。

NULLカラム NULLカラムの利用の有無、利用基準を規定します。

フラグ実装の指針 区分や処理済み等のフラグカラムの実装指針を規定します。

サブタイプ実装の指針 サブタイプテーブルの実装指針を規定します。

代理キー 複合キーの集約などの目的で設定される代理キー(システム内部のキー)の利用指針を規定します。

RDBMS機能 一意制約、参照制約、トリガや連続的な数値の生成などのRDBMS機能の利用方針を規定します

検討項目

Page 50: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

データベース実装サンプル

項目 規定

非正規化の指針 論理データベースをそのまま利用し、非正規化はパフォーマンス向上が目的の場合に利用を限定します。

Date、Time型の利用 全て文字列で代用します。

NULLカラム NULL許可カラムの利用は避けます。数値は0、文字型の場合は空文字列、Date型については文字型を利用します。

フラグ実装の指針 1万件以上保持するテーブルのカラムで単独で検索されるものについては、フラグ用のテーブルを作成し利用します。

サブタイプ実装の指針 論理データベース構造をそのまま利用します。

代理キー 利用しません。

RDBMS機能 マスタへの外部キー制約(参照制約)を必ず指定します。トリガは利用しません。

Page 51: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

データアクセス

検討項目 内容

ストアドプロシージャの利用基準

ストアドプロシージャの利用基準を規定します

分離レベルの指針 書き込み時、読み込み時などトランザクションのタイプ別の分離レベルを規定します。

ロック制御の指針 ロック手順、ロックするテーブルの順番やデッドロック時の対処方法を規定します。

検討項目

Page 52: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

データアクセスサンプル

項目 規定

ストアドプロシージャの利用基準

複数SQL文を実行する場合、もしくは、パフォーマンス向上が目的の場合にのみ利用します。

分離レベルの指針 更新処理を含むトランザクションではSerializable、検索処理のみのトランザクションではRead Committedを利用します。ただし、検索処理でも、データ整合性を必要とする場合はSerializableを利用します。

ロック制御の指針 書き込み時のアクセス順序を揃えます。アクセス順は、データが作成される順を基本とします。データ読み込み後、同じデータを書き込む場合は、予め読み込み時に更新ロックを必ず確保します。オンライン処理でデットロックが発生した場合は、ユーザに再実行を行う旨のメッセージを表示し自動的な再実行は行いません。

Page 53: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

トランザクション

検討項目

検討項目 内容

トランザクション方式 DBMSなどのショートトランザクション方式を規定します。(自動トランザクション、マニュアルトランザクション)

トランザクション開始コンポーネント

ショートトランザクションの開始点になるコンポーネントを規定します。通常はビジネスファサードをトランザクション開始コンポーネントにします

ロングトランザクション ロングトランザクションのサポートの有無、実装方式の規定を規定します。楽観ロックなどの、DBMSのロックを利用しない排他制御やトランザクション管理を規定します。

Page 54: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

サービス

検討項目

検討項目 内容

プロトコル・フォーマット HTTPやMSMQなどの利用するプロトコルや転送フォーマットを規定します。

他システムインタフェース 他システムのインタフェースを規定します。

Page 55: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

ユーザインタフェース

検討項目

項目 内容

ナビゲーション メニューやウイザードUI間のナビゲーション方法を規定します

データ表示 数値やテキストなどのデータ表示方法を規定します

データ入力 データ入力方法を規定します

メッセージ エラーや情報通知のためのメッセージ表示方法を規定します

ヘルプ ヘルプ表示単位および表示方法を規定します

コントロール部品 コントロール部品の適用範囲やスタイルを規定します

共通UIレイアウト 共通UIレイアウトを規定します

Page 56: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

ユーザインタフェースサンプル

項目 規定

ナビゲーション Windowsアプリケーションは、メインメニューからウイザード形式で移動します。Webアプリケーション部は、常時表示されたメニューから直接移動させます。

データ表示 Webアプリケーションでは横スクロールは使用しません。文字も数値も基本的に左詰にします。3桁カンマは利用しません。日付フォーマットはYYYY/MM/DDで統一します。

データ入力 タブ移動は上から下、左から右にします。この順番が守れない場合、パネル等でエリアを明示します。ファンクションキーは利用しません。入力チェックは、単一項目は入力エリアからフォーカスが抜けたタイミングで行い、エラー発生時は該当入力コントロールの右側にエラーマークを表示します。入力チェックは必須、範囲、文字制限、複数項目の単純な整合性チェックを対象とします。マスタ入力は常に一覧からの選択とします。

メッセージ アプリケーション例外は画面下部のメッセージ表示用ラベルに表示します。システム例外は、メッセージボックスで表示しユーザにアプリケーションの継続か終了を選択できるようにします。

ヘルプ オンラインヘルプは利用しません。

コントロール部品 コントロール部品一覧を参考

共通UIレイアウト 共通UIレイアウトを参考

Page 57: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

ユーザインタフェースサンプル

コントロール部品一覧(Windows)目的 コントロール スタイル、備考 カスタム化

フォームデフォルト フォント10pt

項目表示(大項目) Label フォント14pt

項目表示(個別項目) Label フォント12pt

グループ化 Panel、GroupBox

ステータス表示 Label エラーメッセージは赤色情報メッセージは青色

データ表示(単一項目) TextBox Read Only

データ表示(表形式) DataGrid

テキスト入力 TextBox

マスタ選択 ComboBox 利用する件数が多い場合、絞り込み機能を追加する

入力エラー表示 ErrorProvider

データ選択(ON/OFF) CheckBox

データ選択(固定複数項目) RadioButton 5項目以上はComboBoxを利用

*スタイルの指定が特にないものについてはデフォルト値を適用する

Page 58: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

ユーザインタフェースサンプル

コントロール部品一覧(Web)目的 コントロール スタイル、備考 カスタム化

フォームデフォルト フォント10pt

項目表示(大項目) Label フォント14pt

項目表示(個別項目) Label フォント12pt

グループ化 Panel

ステータス表示 Label エラーメッセージは赤色情報メッセージは青色

データ表示(単一項目) Label

データ表示(表形式) DataGrid

テキスト入力 TextBox

テキスト入力(入力検証付) TextBox+検証コントロール

マスタ選択 DropDownList 利用する件数が多い場合、絞り込み機能を追加する

入力エラー表示 検証コントロール

データ選択(ON/OFF) CheckBox

データ選択(固定複数項目) RadioButtonList 5項目以上はDropDownListを利用

*スタイルの指定が特にないものについてはデフォルト値を適用する

Page 59: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

サンプル アプリケーション

ユーザインタフェース

共通UIレイアウト(Web) 共通UIレイアウト(Windows)

Page 60: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

ユーザインタフェース制御

検討項目

項目 内容

UI間データ共有方式 UI間でデータを受け渡す実装方式を規定しますWebではCookie、クエリ文字列、セッション、ViewState(HIDDENタグ)の利用基準を検討

クライアントサイドスクリプトの利用(Webブラウザサポート時)

クライアントサイドスクリプトの利用の有無および利用基準を規定します

表示キャッシュの利用(Webブラウザサポート時)

表示キャッシュの利用の有無や利用基準を規定します

Windows アプリケーションの配置(Windows デスクトップサポート時)

利用するWindowsアプリケーションの配置先・配置方法を規定します

Page 61: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

セッション制御

検討項目

項目 内容

セッション機能 セッション制御で必要とされる機能を規定します

セッション情報 セッションで管理する項目を規定します

セッションタイムアウト(Webサーバー利用時)

セッションタイムアウトの時間や発生時の対応方法を規定します

セッションステートの利用(Webサーバー利用時)

セッションステートの利用有無や実現方式を規定します(インプロセス、ステートサーバー、SQLServer)

Page 62: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

セキュリティ

検討項目

項目 内容

認証 ユーザの認証方式を規定します

許可制御 ファイルやデータベースの許可制御の実装方法を規定します

暗号化・署名 通信・データなどの暗号化や署名の実装方法を規定します

スマートクライアントセキュリティポリシー

スマートクライアントのセキュリティポリシーの利用の有無、利用するセキュリティティポリシーを規定します

Page 63: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

例外(エラー)ハンドリング

検討項目

項目 内容

アプリケーション例外

アプリケーション例外の実装方法を規定します

特殊な例外(テクニカル例外)

デッドロックなど特別にハンドリングする例外の規定やハンドリング方法を規定します

例外ハンドリング 利用するコンポーネントタイプでの例外ハンドリングやWebアプリケーションの集約ハンドラなどの特別な例外ハンドラのハンドリング方法を規定します

ロギング 例外のロギング方法を規定します

Page 64: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

例外(エラー)ハンドリングサンプル

項目 規定

アプリケーション例外 AbcApplicationExceptionを利用します。

特殊な例外(テクニカル例外)

DBアクセスで発生するデッドロックは特殊な例外として扱います。デッドロックが発生した場合、ユーザに処理の再実行を依頼するメッセージを表示するだけとし、アプリケーション例外と同様のハンドリングで処理します。デッドロック発生の有無チェックは共通機能(SqlHelper)を利用します。

例外ハンドリング Webフォームアプリケーション例外のみハンドリングします。システム例外は集約例外ハンドラー(Global.asax)で例外をログします。

WindowsフォームWebサービスを呼び出し時はサーバー側でアプリケーション例外が発生しているかチェックします。システム例外はアプリケーションで設定した集約例外ハンドラで例外をログし、ユーザに通知します。

XML Web サービス・サービスインタフェース全ての例外をハンドリングしシステム例外はログします。必要に応じて連携するシステムの形式でエラーを返します。WebサービスはカスタムSOAPエラーに変換しクライアントに返します。

ビジネスファサード・ビジネスコントローラ他のビジネスロジック呼び出し時のアプリケーション例外は、必要なときのみハンドリングします。通常ハンドリングは不要です。システム例外についてはハンドリングしません。

データアクセスロジックコンポーネントテクニカル例外以外のシステム例外についてはハンドリングしません。

Page 65: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

ログ出力

検討項目

項目 内容

監査オペレーションログ ログインやマスタ登録など重要なオペレーションのログ出力項目を規定します

デバッグログ デバッグ用のログ出力の有無、出力項目を規定します

ログ出力方法 ログ出力方法を規定します

Page 66: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

バッチ処理

検討項目

項目 内容

ジョブ制御 バッチ処理のジョブを管理するための仕組みを規定します

オンライン中のバッチ処理

バッチ処理中のオンライン処理の制御の仕組みを規定します

チェックポイント 再実行可能なジョブの実行ポイントの実装方法を規定します

Page 67: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

個別技術の検討

よくある質問( FAQ )

全ての個別技術について規定する必要があるか?

アプリケーションが利用する技術に関してはできる限り規定します。特に技術的に難しい点やリスクがある点などは必ず検討を行い指針を記述します。規定しない場合も、アーキテクチャ設計諸に規定しないと明記するようにします。

リスクが高い技術項目はどのように識別すればよいか? リスクの候補として以下のようなものを検討します。

アーキテクチャ要件定義で記述されている特別な要求

パフォーマンス、可用性、運用etc

トレードオフが存在する要求

例) ブラウザを利用したリッチクライアント、分散環境下での集中管理

例) 最適化されたパフォーマンスを求められる汎用機能

Page 68: エンタープライズ.Net アーキテクチャ設計編

http://biki.jp.net/enterprisenet

まとめ

アーキテクチャ設計の主要なタスクにはどのようなものがあるか

共通機能の識別はどのように実施するか

技術選択の項目にはどのように行うか