いいえ。
私は、小規模および大規模なプロジェクトで、単一の開発者 (私) と開発者チームの両方で両方の方法を試しました。
最も単純で生産的なルートは、プロジェクトごとに 1 つの名前空間を持ち、すべてのクラスがその名前空間に入る方法であることがわかりました。その後、クラス ファイルを任意のプロジェクト フォルダーに自由に配置できます。名前空間は 1 つしかないため、常にファイルの先頭に using ステートメントを追加する必要はありません。
ソース ファイルをフォルダーに整理することが重要であり、私の意見では、すべてのフォルダーを使用する必要があります。これらのフォルダーも名前空間にマップすることを要求することは不要であり、より多くの作業が発生します。追加の負担が混乱を助長するため、実際には組織にとって有害であることがわかりました.
たとえば、次の FxCop 警告を見てください。
CA1020: 型の少ない名前空間を避ける
原因: グローバル名前空間以外の名前空間に含まれる型が 5 つ未満
https://msdn.microsoft.com/en-gb/library/ms182130.aspx
この警告は、新しいフォルダーの作成を正当化する 4 つの同様のクラスができるまで、新しいファイルを一般的な Project.General フォルダー、またはプロジェクト ルートにダンプすることを奨励します。それは起こりますか?
ファイルの検索
受け入れられた回答は、「クラスが見つけやすくなり、それだけで十分な理由になるはずです」と述べています。
答えは、私が提案しているのは単一の名前空間を持つプロジェクトではなく、フォルダー構造にマップされていないプロジェクトに複数の名前空間があることを指していると思われます。
どのような場合でも、名前空間からクラス ファイルがどのフォルダーにあるかを判断することはできませんが、定義へ移動または Visual Studio の検索ソリューション エクスプローラー ボックスを使用して見つけることができます。また、これは私の意見では大きな問題ではありません。最適化を正当化するファイルを見つける問題に、開発時間の 0.1% も費やしません。
名前の衝突
確かに、複数の名前空間を作成すると、プロジェクトは同じ名前の 2 つのクラスを持つことができます。しかし、それは本当に良いことでしょうか? それが可能であることを単に拒否する方が簡単でしょうか? 同じ名前の 2 つのクラスを許可すると、90% の時間は特定の方法で動作するというより複雑な状況が作成されますが、突然特殊なケースがあることがわかります。別々の名前空間で定義された 2 つの Rectangle クラスがあるとします。
- クラス Project1.Image.Rectangle
- クラス Project1.Window.Rectangle
ソース ファイルに両方の名前空間を含める必要があるという問題が発生する可能性があります。ここで、そのファイルのすべての場所に完全な名前空間を書き出す必要があります。
var rectangle = new Project1.Window.Rectangle();
または、いくつかの厄介な using ステートメントを台無しにします。
using Rectangle = Project1.Window.Rectangle;
プロジェクト内の単一の名前空間では、次のような別の、よりわかりやすい名前を考え出す必要があります。
- クラス Project1.ImageRectangle
- クラス Project1.WindowRectangle
また、使用方法はどこでも同じです。ファイルが両方のタイプを使用する場合、特別なケースに対処する必要はありません。
ステートメントの使用
using Project1.General;
using Project1.Image;
using Project1.Window;
using Project1.Window.Controls;
using Project1.Shapes;
using Project1.Input;
using Project1.Data;
対
using Project1;
コードの作成中に常に名前空間を追加する必要がないという容易さ。それは実際にかかる時間ではなく、それをしなければならないという流れの中断であり、多くの using ステートメントでファイルをいっぱいにするだけです-何のために? その価値はありますか?
プロジェクトのフォルダー構造の変更
フォルダーが名前空間にマップされている場合、プロジェクト フォルダーのパスは各ソース ファイルに効果的にハードコードされます。つまり、プロジェクト内のファイルまたはフォルダーの名前変更または移動には、実際のファイルの内容を変更する必要があります。そのフォルダー内のファイルの名前空間宣言と、そのフォルダー内のクラスを参照する他のファイル全体の using ステートメントの両方。変更自体はツールを使えば取るに足らないものですが、通常は、クラスが変更されていない多くのファイルからなる大規模なコミットが発生します。
プロジェクト内の単一の名前空間を使用すると、ソース ファイル自体を変更することなく、プロジェクト フォルダー構造を自由に変更できます。
Visual Studio は、新しいファイルの名前空間を、そのファイルが作成されたプロジェクト フォルダーに自動的にマップします。
残念ながら、名前空間を修正する手間は、それらを処理する手間よりも少ないことがわかりました。また、Add->New を使用するのではなく、既存のファイルをコピーして貼り付ける習慣がついています。
インテリセンスとオブジェクト ブラウザ
大規模なプロジェクトで複数の名前空間を使用することの最大の利点は、名前空間の階層でクラスを表示するツールでクラスを表示するときに、追加の編成ができることです。ドキュメンテーションも。明らかに、プロジェクトに名前空間が 1 つしかない場合、すべてのクラスがカテゴリに分割されるのではなく、1 つのリストに表示されます。ただし、個人的には、これがないために困惑したり遅れたりしたことは一度もないので、複数の名前空間を正当化するのに十分なメリットがあるとは思いません。
ただし、大規模なパブリック クラス ライブラリを作成する場合は、プロジェクトで複数の名前空間を使用して、ツールやドキュメントでアセンブリがきれいに見えるようにするでしょう。