0

次のような状況があります。多層アプリケーションを使用しているため、レイヤーごとに異なるアセンブリを作成しました。それらをトップ、ミドル、ベースと呼びましょう。それらは次のように依存しています。

Top->Middle->Base。Top は Middle および Middle from base のクラスを使用するためです。

これで、Base からは何も使用しない Middle からのいくつかのクラスのみを必要とする 2 番目の Applikation Top2 が作成されます。

Top2 の展開に Base を含めない方法はありますか?

準拠しようとすると、アセンブリ Base への参照も必要であると VS から通知されます。

ベストトーマス

4

1 に答える 1

1

「ミドル」はブーツが少し大きくなっているように聞こえます。

アセンブリは、必要のないものを参照するべきではありません。したがって、あなたの状況は、アセンブリを分割するのに適した候補のように思えます。

現時点の

Application One -> "Middle.dll" -> "Base.dll"

あなたの提案

Application One -> "Middle.dll" -> "Base.dll"

Application Two -> "Middle.dll" -> "(Redundant) Base.dll"

これは、実際によく使用されるオブジェクトが本質的にビジネス ロジックと不必要にまとめられている場合に発生する典型的な問題です。つまり、Middle.dll にアプリケーションに役立つユーティリティ クラスがあるかもしれませんが、実際にはそこにある必要はありません。別のユーティリティ dll を使用したほうがよい場合があります。

提案

Application One -> "Middle1.dll" -> "Base.dll"
                -> "Middle2.dll"

Application Two -> "Middle2.dll"

現在 Middle.dll に存在する Base.dll を使用するために必要なすべての機能は、Middle1.dll に移動する必要があります。そうすれば、非依存コードのみを使用する必要がある場合は、Middle2.dll を参照するだけで済みます。

コードベースによっては、大きなリファクタリングになるかもしれませんが、後でそれを評価することになるでしょう!

これに対するメリット

  • テストは改善される予定です。
  • これら 2 つのアプリケーションを完全に分離する必要がある場合は、リファクタリングが少なくて済みます。
  • 何らかの理由で「Middle1」のみを変更する必要がある場合、両方のアプリケーションが壊れる可能性が低くなります
  • 懸念事項の明確な分離
  • 現在のようなコンパイラの問題はありません
  • すべてのプログラムでプログラムに必要な一括コードはありません
  • より小さく、より管理しやすいアセンブリ
  • 改善されたインテリセンス
  • Middle1 と Middle2 は同じ名前空間を共有できるため、アプリケーションには違いがわかりません。

注:もちろん、Middle1 や Middle2 と呼ぶべきだと言っているわけではありません。しかし、あなたはその考えを理解します。

于 2013-02-01T15:59:42.093 に答える