1

ソフトウェア アーキテクチャ (および Visual Studio) の学習演習として、4 つの最小限の WPF/C# アプリケーション (ソリューション) のセットを 1 つの目的で作成することにしました。ボタンが押されたときにファイルからいくつかの円パラメーターを読み取り、表示します。 GUI 上の結果:

  1. 1 つのアプリケーションは .txt ファイルから読み取り、パラメーターをテキスト ボックスに表示します。
  2. 1 つのアプリケーションは .xml ファイルから読み取り、キャンバスに円を表示します。
  3. 1 つのアプリケーションは .txt から読み取り、円を表示します。
  4. 1 つのアプリケーションは .xml から読み取り、テキスト パラメータを表示します。

つまり、Circle クラスを含む 1 つの Domain プロジェクト、2 つの DataAccess プロジェクト (1 つは xml 用、もう 1 つは txt 用)、2 つのプレゼンテーション プロジェクト (1 つはジオメトリ描画用、もう 1 つはテキスト表示用) を持っています。4 つのソリューションはそれぞれ、これらの再利用可能なモジュール化されたプロジェクトの組み合わせを指します。

また、FAÇADE デザイン パターンを使用して、プレゼンテーションがファサードを「見る」が、データ アクセスやドメインを認識しないようにしたいと考えています。Façade は Domain と DataAccess を認識し、各 DataAccess は盲目的にビジネスを行います。

問題は次のとおりです。

  • Façade プロジェクト内で DataAccess 名前空間を使用するには、2 つの DataAccess レイヤーのいずれかに名前空間の依存関係を作成する必要があるため、2 つの Façade が必要でした。したがって、1 つの Façade は XmlBackend に依存し、他の Façade は TxtBackend に依存します。
  • 各プレゼンテーションは Façade に依存するため、名前空間を利用できますが、私には 2 つのファサードがあるため、各プレゼンテーション プロジェクトは 2 つの異なるファサード プロジェクトに依存することになり、これは悪いことです。

各プレゼンテーションがそれを参照するように単一の Façade プロジェクトを作成しようとしましたが、この Façade は 2 つの異なる DataAccess バックエンドに依存します。次に、ソリューションでは、Façade プロジェクトが 2 つの異なるプロジェクトに依存するため、DataAccess バックエンド プロジェクトを 1 つだけにすることはできませんでした。

問題は、これを解決して 4 つのソリューションを作成し、各ソリューションに必要なプロジェクト (ドメイン、ファサード、1 つのプレゼンテーション、1 つのデータ バックエンド) のみを持たせ、階層化アーキテクチャに違反せず、各プロジェクトをどのように解決できるかです。他の人についてあまり知る必要はありませんか?

更新: Msdn ライブラリには次のように書かれていますが、これはヒントかもしれません。「[ソリューション エクスプローラーを使用すると、ソリューション内の複数のプロジェクトに役立つアイテムを追加したり、各プロジェクトのアイテムを参照せずにソリューションに追加したりできます。」

読んでくれてありがとう!

4

1 に答える 1

1

完全な分離が必要で、2 つの DataAccess モジュールから独立して Façade を再利用できることが絶対に必要な場合はIDataAccess、両方の DataAccess プロジェクトのクラスが実装するインターフェイスを Façade レイヤーで宣言することができます。

サード パーティのモジュール (GUI の 1 つですか?) は、実行時に必要に応じて、適切な DataAccess 具象実装を Façade に挿入します。

補足として、問題の一部は、このアーキテクチャでは 1 プロジェクトがほぼ == 1 クラスであるため、オブジェクトの密結合とプロジェクトの密結合の問題が混同されているという事実に起因しています。

ただし、プロジェクトの結合は再利用性にのみ影響するのに対し、オブジェクトの密結合は脆弱性、保守性およびテスト容易性の低下につながることに注意する必要があります。言い換えれば、両方の DataAccess プロジェクトを参照する Façade を使用できますが、DataAccess プロジェクトが手元になければ、別のコンテキスト/アーキテクチャで Façade を再利用できないことを意味するだけです。

于 2013-01-23T16:43:24.967 に答える