0

レイヤード アーキテクチャの理論では、同じレイヤーに複数のモジュールを配置できます。このモジュールは互いに相互参照できますか? 技術的には可能です。.NET を使用していますか?

4

3 に答える 3

1

確かにそうすることは可能ですが、モジュール間に循環依存関係を導入しないように注意してください。一般に、特定のレイヤーのモジュールは、同じレイヤーまたはその下のレイヤーの他のモジュールにのみ依存する必要があります。モジュールは、その上のレイヤーを認識してはなりません。

これをさらに厳密にしたい場合は、現在のレイヤーのすぐ下にある同じレイヤーまたは他のレイヤーからの他のモジュールへの依存関係を制限することもできます。

公開されたインターフェースを最小限に抑えること、たとえば、パブリックインターフェース、値オブジェクト、および例外のコアセットのみを公開することは常に良い考えです。言語のアクセス制御機能(つまり、プライベート/パッケージ/パブリック)を使用して、モジュール内部の可視性が他のレイヤーに流出するのを制限できます。

于 2009-05-25T11:07:56.893 に答える
0

技術的には、.NET では任意の方向に相互参照できます (DAL が UI コンポーネントを参照するのは技術的な制限はありませんが、それは良い考えではないかもしれません)。同じレイヤー内のモジュールを参照しても問題はありません。

ただし、レイヤーにはさまざまな形やサイズがあるため、「レイヤー」という言葉を少し確認する必要があります。多くの場合、「レイヤー」という言葉を使用するときは、データ アクセス レイヤーまたはプレゼンテーション レイヤーを考えます。通常、レイヤーが下向きに見えることは許されますが、上向きには見えません。

各レイヤー内では、さまざまなモジュールが論理的にレイヤーに配置されることもよくあります。ここでも同じ規則が適用されます。モジュールは下を向くことはできますが、上を向くことはできません。それを念頭に置いて、同じ(外側の)レイヤー内でモジュールを参照することはかなり安全だと感じています。

直接または間接的に、2 つのモジュールが相互に参照しないようにしてください。A と B の両方が相互に機能する必要があることがわかった場合 (A と B が同じレベルにあることを示します)、おそらくコードをリファクタリングする必要があります。おそらく、A と B の下に論理的に配置された新しいモジュール C を導入します。それらの使用できます。

また、モジュールをできるだけ分離したままにしておくことも忘れないでください。彼らがお互いについて知らないほど良いです。

于 2009-05-25T11:16:49.323 に答える
0

Pavel が言ったように、循環依存関係には注意してください。循環依存関係 (相互参照と呼ばれるもの) なしでは絶対に生きていけない場合、クラスは同じ「レイヤー」からだけでなく、同じアセンブリからのものでなければなりません。

そうは言っても、相互参照の理由はないはずです-(pavelが言ったように)モジュールはその下のレイヤーにのみ依存するだけでなく、すべての場合に一方向の依存関係が存在する必要があります。

この規則には論理的な例外がいくつかあります。たとえば、ドメイン モデルのようなものでは、顧客は多数の注文を受けます。その場合 (特に ORM などの場合)、顧客に関する注文のリストと、各注文からの顧客への参照があると便利です。サービスなどの機能の単位に関しては、一方向の依存関係のみが存在する必要があります。

この問題を回避する 1 つの方法は、Windsor、autofac、spring.net などを介して制御の反転を使用することです。アセンブリでインターフェイスを定義し、そのインターフェイスの具体的な実装を使用する別のオブジェクトを定義できます。別のライブラリに実際の実装が含まれている場合があります (つまり、アセンブリは最初のアセンブリを参照する必要があります)。この場合、IoC コンテナーが実装を取得します。

于 2009-05-25T11:17:56.217 に答える