DOBON.NET DOBON.NETプログラミング掲示板過去ログ

アプリケーション・アーキテクチャーについて

環境/言語:[WindowsXP/Visual Basic 2005/.NET Framework 2.0/SQL Server Express 2005]
分類:[.NET]

どなたか、アプリケーション・アーキテクチャーについて、
VB.NET系での具体的な開発例が乗っているサイトなど知りませんか?

分散アプリケーションではなく、単一のデスクトップアプリケーション
(Windows アプリケーション)を開発予定ですが、複数の開発者間で
設計の意図を伝えやすくし、後のメンテナンスや改修を容易に行えるように
するためにとても魅力的な概念だと思いました。

また、データベースは使わす、ファイルベースのアプリケーションと
する予定です。ファイルのみを扱うデータ層について、詳しい解説が
あるサイトがあればご教示頂けないでしょうか。どのサイトも
データベースを扱うアプリケーション・アーキテクチャについての情報
ばかりで適切な情報が見つかりませんでした。

アーキテクチャ上のコンポーネント同士のつながりについての具体例のみ
でもかまいません。

どなたか、よろしくお願いします。
2009/02/06(Fri) 16:35:36 編集(投稿者)

アプリケーション・アーキテクチャについて
といっても切り口が難しいと思います。

現在、私は以下のような形で実装を考えています。

私が作ろうとするアプリケーションとは、次のようなものです。

「単一の Windows フォーム・アプリケーションであり、
 データソースとしてファイルまたはネット上のサービスのみ扱い、
 データベースは使用しない。」


例えば扱うファイルを

1.設定ファイル
2.データファイル

として、これらのファイルを扱うデータアクセス・ロジック・コンポーネントを
DALC クラスとして定義します。

DALC クラス内に Private で次のインスタンスおよびメソッドを宣言します。

・扱うファイルのパス情報(FileName1, FileName2)

・ファイルの内容を読み込むインスタンス(DataFromFile1, DataFromFile2)
(DataFromFile1, DataFromFile2 は、それぞれファイルから必要な情報を読み取り、Public なフィールド変数として値を保持するクラスのインスタンス。
例えば、Private DataFromFile1 As DataFromFile1 のように専用のクラスによって宣言されている。)

・FileName1 の内容を読み込んで DataFromFile1 にセットするメソッド
・FileName2 の内容を読み込んで DataFromFile2 にセットするメソッド

また、DALC クラス内に、Public で次のメソッドを宣言します。
・DataFromFile2 内にある String 型のフィールド変数「 Data1 」を返すメソッド GetData1
・DataFromFile2 内にある String 型のフィールド変数「 Data2 」を返すメソッド GetData2
・DataFromFile2 内にある String 型のフィールド変数「 Data3 」を返すメソッド GetData3

以上のように DALC クラスを定義し、
DALC クラスのインスタンスをプログラム全域で参照できるように
次のようにします。

(プレゼンテーション層、ビジネス層、データ層の各コンポーネントを
Shared にて保持するクラス LayerComponent クラスを作成する。)

LayerComponent クラス内のメンバ
・Shared myDALC As new DALC()
・Shared mySA As new SA()
・Shared myBC As new BC()
・Shared myUIP As new UIP()
・…
(各コンポーネントを Shared で宣言する)

このようにすると、プログラム全域で、全てのコンポーネントにアクセスでき、
また各コンポーネントはカプセル化された状態になります。
アプリケーション・アーキテクチャーはプログラム全域で共有するものなので、
このような実装になるかと思いました。


また、コンポーネント同士の連携のさせ方については、
以下のように考えています。

例えば、次のような機能

「 UI(フォーム、Form1)上のボタン1をクリックすると、
 データファイル内の文字列 Data1 と Data3 を連結させた
 文字列がラベル1に表示される」

を実現する場合のコンポーネント間の連携について、以下のように
考えています。

ボタン1のクリック・イベントハンドラに次のようにコードを書きます。

( ボタン1のクリックイベントハンドラ )

 Me.Label1.Text = LayerComponent.myUIP.GetData()

LayerComponent の myUIP フィールドは、UIP 型のインスタンスであり、
UIP クラスには、GetData という Public メソッドが定義されています。
このメソッドは、String 型の戻り値を持ち、次のような内容になっています。

( UIP クラスの GetData メソッド )

 Return LayerComponent.myBC.GetData()

LayerComponent の myBC フィールドは、BC 型のインスタンスであり、
BC クラスには、GetData という Public メソッドが定義されています。
このメソッドは、String 型の戻り値を持ち、次のような内容になっています。

( BC クラスの GetData メソッド )

 Dim s1 As String = LayerComponent.myBE.GetData1()
 Dim s2 As String = LayerComponent.myBE.GetData2()
 Return s1 + s2

LayerComponent の myBE フィールドは、BE 型のインスタンスであり、BE クラスには、GetData1 と GetData2 という Public メソッドが定義されています。
このメソッドは、String 型の戻り値を持ち、次のような内容になっています。

( BE クラスの GetData1 メソッド )

 return Data1

( BE クラスの GetData2 メソッド )

 return Data2

ここで返される Data1, Data2 は、同クラス( BE クラス)内で宣言されている
String 型の Private な フィールド変数であり、BE のコンストラクタにて
次のようにセットされます。

( BE クラスのコンストラクタ )

 Data1 = LayerComponent.myDALC.GetData1
 Data2 = LayerComponent.myDALC.GetData3

ここでは、myDALC によってデータファイルから読み込まれた情報 DataFromFile2
のうち、DataFromFile2.Data1 と DataFromFile2.Data3 をビジネスエンティティ
( BE )の Data1, Data2 としています。これによって、ここでは
DataFromFile2.Data2 は使わないというビジネスルールを実装しています。

以上のようにして、UI(フォーム)にてボタン1がクリックされた時、
データファイル( DataFromFile2 )内の Data1 と Data3 が連結した
文字列を Label1 に表示される、という機能が実現できます。


以上が、現在私が考えているアプリケーション・アーキテクチャの
実装方法の具体例です。
恥ずかしながら、今までアプリケーション・アーキテクチャについて
考えたことがなく、以上のような形でよいのかどうか、自信がありません。
おかしな点などありましたらご指摘下さると幸いです。
また、上記のようなファイルベースのアプリケーションの
アプリケーション・アーキテクチャについての情報や、ファイルのみを
扱うデータ層のベストプラクティスなどの参考情報が掲載されている
サイトなどご存知の方がいらっしゃいましたらご教示頂けませんでしょうか。

よろしくお願いいたします。

DOBON.NET | プログラミング道 | プログラミング掲示板