パッケージ間または配布単位間の結合をより考慮する必要がありますか?

StackOverflow https://stackoverflow.com/questions/123687

  •  02-07-2019
  •  | 
  •  

質問

私はメトリクスを調べてきました カップリング そしてまた見てください DSM.

私が使用しているツールの 1 つは、配布単位 (この場合は .net アセンブリ) である「モジュール」間の結合を調べています。

私は、配布単位よりもパッケージ (または名前空間) 間の結合に注目する必要があると感じています。

パッケージ/名前空間間の結合にもっと関心があるべきでしょうか (抽象化は抽象化にのみ依存し、具象型は抽象化に依存し、リファクタリングと拡張が簡単になるように依存関係に循環がないことを確認します)。それとも、変更されていない配布単位を更新することなく、新しいバージョンをデプロイできますか?

他の人は何を測定しますか?

実際のところ、私の直感では、パッケージと名前空間の結合に焦点を当てれば、配布結合のユニットは無料か、少なくとも簡単になるでしょう。

役に立ちましたか?

解決

まず、依存関係や結合に目を向けすぎてしまうのは簡単です。複雑にしすぎないように注意してください。

免責事項はこのくらいにして、私が提案するのは次のとおりです。

依存関係/結合管理には実際には 3 つの異なるビューがあります。1) 物理的構造 (すなわち、アセンブリの依存関係)2)論理構造(つまり、名前空間依存関係)3)実装構造(つまり、クラスの依存関係)

大規模なアプリの場合は、少なくとも 3 つすべてを調べる必要がありますが、通常は優先順位を付けることができます。

クライアントにデプロイされたアプリの場合、1 番が非常に重要になる可能性があります (つまり、プラグインなどの場合)。企業内にデプロイされたアプリの場合 (つまり、asp.net)、項目 #1 は通常、それほど重要ではないことがわかります (複数のアプリで再利用されるフレームワークを除く)。通常、アプリ全体を簡単にデプロイできるため、#1 の複雑な構造によるオーバーヘッドが発生しません。

項目 #2 は保守性の問題になる傾向があります。レイヤーの境界と、その境界と名前空間との関係を理解し​​ます (つまり、名前空間ごとに 1 つのレイヤーを実行していますか、それとも論理レベルで異なるパッケージ化されていますか)。場合によっては、論理的な依存関係構造を確認することで、レイヤー境界を強制するツールが役立つ場合があります。

項目 #3 は、実際には適切なクラス設計を行うことです。優れた開発者は皆、クラス内で適切な依存関係のみを確実に持つようにかなりの努力を払う必要があります。これは言うは易く行うは難しで、通常は時間をかけて習得する必要があるスキルです。

質問の核心にもう少し近づくと、項目 #1 は実際に VS ソリューション内でプロジェクトがどのように配置されるかに関するものです。したがって、これは測定する項目ではありません。それはむしろ、最初にセットアップして実行するものです。項目 #2 は、ビルド中にツールを使用して、開発者がルールに違反していないかどうかを確認するものです。それは実際には測定というよりもチェックです。項目 #3 は、実際に測定してみていただきたい項目です。コードベース内で結合度が高いクラスを見つけることは、今後の課題となるでしょう。それらのクラスの品質を確保してください。また、このレベルで測定すると、コードベースの進化に伴う品質 (全体) についてある程度の洞察を得ることができます。さらに、誰かが本当に卑劣なコードをコードベースにチェックインした場合、危険信号が発せられる可能性があります。

したがって、優先順位を付けたい場合は、#1 と #2 をざっと見てください。それらがどのように見えるべきかを知ってください。ただし、ほとんどのアプリでは、項目 #3 に最も時間がかかるはずです。

もちろん、この答えには、巨大なフレームワーク (.NET BCL など) は含まれていません。それらの赤ちゃんは#1に非常に細心の注意を払う必要があります。:-)

そうしないと、次のような問題が発生します。「.NET Framework の現在のバージョンには、Server Core では適切に動作しないさまざまな GUI ベースのライブラリが含まれています。」http://www.winsupersite.com/showcase/win2008_ntk.asp

フレームワークが GUI ライブラリに依存するため、Windows Server 2008 の GUI なしインストールでは .NET を実行できません...

最後に一つ。適切な依存関係/結合管理の背後にある原則をよく理解してください。ここで素晴らしいリストを見つけることができます。

http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod

他のヒント

配布単位間の結合と依存関係のサイクルは、プログラムのデプロイを非常に困難にする可能性があり、場合によってはプログラムのコンパイルさえ非常に困難にする可能性があるため、より「致命的」です。

あなたはほぼ正しいです。コードを論理パッケージに分割し、明確で事前定義された依存関係を備えた優れたトップレベルの設計だけで、ほとんどのことを実現できます。唯一欠けているのは、パッケージをディストリビューションのユニットに正しく分離することです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top