名前空間のクラス数-コードのにおい?


11

複数の実行可能ファイルで使用されるC#ライブラリがあります。ライブラリには名前空間がいくつかありますが、名前空間の1つにかなりの数のクラスが含まれていることに気づきました。分類のため、そして無意識のうちに、名前空間のより深い階層を持つことは「きれい」に見えるため、単一の名前空間にあまり多くのクラスを含めることを常に避けてきました。

私の質問は、名前空間に多くのクラスがある場合、クラスが互いに関連している場合でも、他の誰かがそれを「コードのにおい」と見なしますか?サブカテゴリー化を可能にするクラスでニュアンスを見つけるために多くの努力をしますか?


8
クラスが上記の名前空間に属している場合は、いいえ。デザインはその性質上主観的であるため、実際に言うのは難しく、すでに特定したように、好みの問題です。
Chris

Whatecer StyleCopによると、法律です。きっと気に入らないでしょう。
仕事

2
「少し」を定義します。10?100?1000?
エリックキング

回答:


7

必ずしも。すべてのクラスが実際に名前空間で定義されたカテゴリに属している場合は、問題ありません。

あなたができることは、クラスを見て、それらのいくつかをマージする可能性について考えることです。これらのクラスの小さなグループが「ファミリ」機能をサポートすることもできますが、いくつかの歴史的な理由により個別に実装されました。十分な時間が経過すると、より良い構図が可能になるかもしれません。


6

あまりにも多くの名前空間を持つことは避けてください。これにより、ライブラリーがプログラマーにとって使いにくくなり、ナビゲートしにくくなります。また、多くの名前空間では、各名前空間に正確な名前を提供し、特定のクラスがどの名前空間に属すべきかを決定することも、設計者にとって困難になる可能性があります。

最も簡単な方法は、すべてのプライマリクラスを単一の名前空間に入れ、高度なシナリオクラスをサブ名前空間に組み込むことです。.NET Frameworkは常にこれを行います。このプラクティスの良い例については、System.CollectionsおよびSystem.Collections.Specializedを参照してください。

第1レベルの名前空間が1つまたは2つだけの場合は、プログラマーが発見できるようになるまで、高度なクラスまたは特殊なクラスが非表示になるため、コードをナビゲートしやすくなります。


3

それらが一緒に属し、相互に関連している限り、名前空間内のクラスが多すぎても問題はありません。

クラスがそれ自体の個別の名前空間に属しているかどうかは、個人の好みの問題です。

より自然に見えるものは?

Parsers.XML.XmlParser.cs
Parsers.XmlParser.cs

それは完全にどのように依存し、あなたがあなたのコードを見て起動するのが好きです。

個人的には、それに属するクラスが複数あることがわかっている場合にのみ、個別の名前空間を使用します。


0

これで結構です。名前空間を使用する主な理由は、名前の衝突を回避するためであり、この後で初めて、ルールではなく個人の選択の問題である論理スコープについて考える必要があります。もちろん、いくつかの賢明なルールは大歓迎です。1つの名前空間で3k〜4kのクラスをスクロールする必要はありません。

良い例は、C ++標準ライブラリのstd名前空間です。これにより、独自のアルゴリズムを標準のアルゴリズムから分離できます。


-1。名前の衝突は重要ですが、クラスの概念的なグループ化も重要です。
umlcat 2011年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.