0

私は現在、大規模なアプリケーションの基盤を設計しています。データレイヤーにEF、ビジネスレイヤーにプレーンジェーンc#クラス、UIレイヤーにMVC/WCFを使用する従来の3層システムを使用します。アプリケーションのプロトタイプを作成して、これが機能することを認識しましたが、ビジネス要件が複雑なため、一部のビジネスコンポーネントが相互に作用するのが一般的です。

次の2つのビジネスコンポーネントについて考えてみます。

  • RetailManager-システム内の小売に関連するすべてを処理します
  • CartManager-ショッピングカートのエクスペリエンスに関連するすべてを扱います

この2つは、たとえば、アイテムが購入されたときのチェックアウトプロセス中に相互作用します。購入したアイテムの在庫を減らす必要があります。

これまでの私の思考プロセスは次のとおりです。

  1. ビジネスコンポーネントが相互に参照し、循環参照が発生しないようにします(CartManagerはRetailManagerを参照しますが、その逆はありません)。「Checkout」はCartManagerクラスのメソッドであり、RetailManagerのメソッドを呼び出して在庫を調整します。これは機能しますが、どれだけ拡張できるか、また時間の経過とともに維持費がいくらになるかはわかりません。それは私にとって100%「正しい」とは感じません。

  2. ビジネスコンポーネントとUI層の間にファサードを作成します。この例では、ファサードにはチェックアウト方法と両方のマネージャーへの参照があります。私はこのアプローチが最初のアプローチよりも好きですが、すべてのビジネスオブジェクトにFacadeが必要なわけではないことを知っています。また、空のパススルーメソッドを作成するためだけに大量のFacadeクラスを作成したくありません。

私は2に傾いていますが、必要な場合にのみファサードクラスを作成することに注意してください。UI層は、ファサードとビジネスレイヤーの両方のコンポーネントにアクセスでき、どちらをいつ使用するかを知る必要があります(このソリューションについて私が気に入らない部分は1つだけです)。

私はたくさんの研究をしましたが、完全に正しいと感じる解決策を思い付くことができませんでした。

このようにファサードパターンを使用することについての考え、または問題を解決するための他のアイデアは大歓迎です。

前もって感謝します。

4

3 に答える 3

2

これは、マネージャー/サービスクラスを使用する場合の一般的な問題です。彼らは常に肥大化する傾向があります。その時点で、代わりにコマンドの使用を開始することをお勧めします。

IoCを使用しているので素晴らしいことは、すべてのコードを直接リファクタリングする必要がないことですが、時間があるときにそれを行うことができます。他のすべての古いアーキテクチャを維持しながら、すべての新機能のコマンドを書き始めるだけです。

コマンドの概要は次のとおりです。http://blog.gauffin.org/2012/10/writing-decoupled-and-scalable-applications-2/

そして、私自身のフレームワークの紹介:http: //blog.gauffin.org/2012/10/introducing-griffin-decoupled/

于 2012-11-09T12:26:46.547 に答える
1

私はファサードの実装に行く傾向があります。

私は最初に、チェックアウトが発生したときに在庫を確実に減らすのは誰の責任であるかを自問します。CartManager在庫を減らすのは責任ではないと思います。CartManagerによってアイテムがチェックアウトされるたびに、対応するアイテムが在庫から削減されるようにする3番目のクラス(あなたの場合はファサード)があります。

私が検討するもう1つのオプションは、イベントベースの実装です。アイテムがチェックアウトされるたびCartManagerにイベントが発生します。このイベントをサブスクライブし、イベントが発生するたびに在庫を減らします。イベント駆動型設計に不慣れな場合は、クォーラでこの質問に従ってください-http ://www.quora.com/What-are-some-good-resources-on-event-driven-software-designItemCheckedOutRetailManager

于 2012-11-07T21:35:21.103 に答える
0

私は個人的にCQRSのパターンが好きです。それは、イベントソーシングなどの他のアーキテクチャパターンと自然に適合し、複雑なドメインに適しています。

于 2012-11-08T13:48:24.530 に答える