まず、名前空間がフォルダー構造と一致する必要があり、各言語アーティファクトが独自のファイルにある必要があることに同意しましょう。
(ソリューション内のフォルダーは名前空間と一致する必要がありますか?を参照してください)。
次の問題は、ディスク上でフォルダを実際にどのように編成するかです。
ABC 名前空間に ClassC があり、ABCD 名前空間に ClassD があるとします。
また、各名前空間が独自のアセンブリ (プロジェクト) に組み込まれており、受け入れられているベスト プラクティスに従って名前空間が右から左への依存関係を持っていると仮定します (ABCD は、A に依存できる AB に依存できる ABC に依存できます)。各名前空間が個別のアセンブリにある必要はないことを理解していますが、一般的に、いくつかの名前空間は個別のアセンブリにあり、私の例はそれを示しています。
フォルダー ツリーを作成するには、(少なくとも) 2 つの方法があります。これを「ネストされたフォルダー」と「フラット フォルダー」と呼びます。
1 - ネストされたフォルダー:
A
--A.csproj --B
----ABcsproj
----
C
------ABCcsproj
------classC.cs
------D
-------- ABCDcsproj
--------classD.cs
また
2 – フラット フォルダ:
A
--A.csproj
AB
--ABcsproj
ABC
--ABCcsproj
--classC.cs
ABCD
--ABCDcsproj
--classD.cs
すでにいくつかの仮定を行っていることがわかります。
- 各プロジェクト ファイルには、名前空間に基づく完全修飾名 (FQN) があります。
- 各クラス ファイルは非 FQN を使用します
入れ子になったフォルダーはより自然に見えます (私たちは皆、階層が好きです) が、大規模なソリューションではナビゲートするのが少し難しいかもしれません:
VS でソリューションを見ると、ネストされたビューではなく、プロジェクトのフラット リストが表示されます。これは「フラット フォルダー」に似ているため、VS のビューに合わせてディスク上のフォルダーを編成するメリットがあるかもしれません。
ディスク上の各フォルダーを見ると、そのプロジェクトのフォルダー アーティファクトと名前空間のサブフォルダーが表示されます。例として C を取り上げます。
C
--bin
--D
--obj
--Properties
--ABCcsproj
--classC.cs
D の本名によっては、D が C 名前空間の組織フォルダーではなく、名前空間フォルダーであることが明らかでない場合があります。
.NET (8 ~ 9 年前) とそれ以前の Java では、初日からフォルダーと名前空間があったことは知っていますが、個人的に言えば、大規模なプロジェクト組織のベスト プラクティスについて合意に達していないようです。ソリューション。皆さんの考えを知りたいです。
ありがとう
マイケル