フォルダの名前とか。
id:sugimotokazuyaさんと、メッセで話をしていたら、
ちょっとグーなアイディアを聞いてしまったので、興奮した勢いでエントリ。
まずは、こやつを見て下さい。
https://www.seasar.org/svn/sandbox/s2dao.net/source/S2Dao.NET/
まぁ、これが全て。なんだけど。
namespaceとフォルダ名の対応関係に妙味があるのです。
分っちゃった人は、続きを読んでも退屈なだけなので、読まなくても良いかと。
javaだと、フォルダの階層とパッケージ名は正しく一致していなければなりません。
所が、.NETの場合、フォルダの階層とnamespaceに対応関係はありません。
只、まぁあえて全く合わない様にするとか、
namespaceは切るけど、コードは1つのフォルダに全部入れるとか、そういうのは無いと思いますが…。
んで。
eclipseで開発をしていると、
その辺はまぁフォルダをフラットに見せてくれる機能があるので、大変便利です。
所が、VisualStudioだと出来ネェんですなぁ…。少なくとも2003では。*1
それとVisualStudioってフォルダ階層が深いと、途端に扱いずらい感じになるんですなぁ。
フォルダを開く時にもたつく感じがあるのと、フォントが大きいせいかな…と思うんだけど…。
でも。
namespaceはちょっくら深めにしたいな…と思うのが心情。
他所様と被るのは哀しいですからねぇ。
フォルダ階層を作ると、新規クラスをプロジェクトに追加する時も、
namespaceを自動的に付けてくれるし。
今までは、namespaceの階層をフォルダ階層と共に深くするのと、
VisualStudioの使い勝手は両立しないのかと思っていたら!
このid:sugimotokazuyaさんのアイディアです。
フォルダ名に「.(ドット)」を含ませる事で、万事解決なのです。
スンバラシイ。
只、僕が.NETの作法を知らないだけカモ…と不安になって、
他のオープンソースプロダクトもちょっと調べてみたり。
まずは、log4net。
src ├─Appender ├─Config ├─DateFormatter ├─Filter ├─helpers │ └─TypeConverters ├─Layout ├─ObjectRenderer ├─Plugin ├─Repository │ └─Hierarchy └─spi
例えば、Appenderフォルダに入ってる、FileAppenderと言うクラスは、
namespaceが、log4net.Appenderになっているます。
おや………。
次は、nunit。
src ├─core ├─extensions ├─framework ├─install ├─mocks ├─nunit-console ├─nunit-gui ├─samples │ ├─cpp-sample │ ├─csharp │ ├─jsharp │ ├─money │ ├─money-port │ └─vb ├─tests │ ├─mock-assembly │ ├─nonamespace-assembly │ ├─notestfixtures-assembly │ └─timing-tests ├─uikit └─util
例えば、frameworkと言うフォルダに入っているAssertと言うクラスは、
namespaceが、NUnit.Frameworkとなっているます。
ゲフッ…。
次は、EnLibのDAAB。
Data ├─Configuration │ ├─Design │ │ ├─doc │ │ └─Tests │ └─Tests ├─DB2 │ └─Tests ├─doc ├─Instrumentation │ └─Tests ├─Oracle │ └─Tests ├─Sql │ └─Tests └─Tests
シクシクシクシク。つまり、僕が世間知らずだったって事です。
.NETの作法では、基本的に2階層以上フォルダもnamespaceも深くしないのですねぇ…。
只、全体的に見て、interface階層とその実装階層が分かれていないのが、
非常に気になります。
javaのpackageと.NETのnamespaceには、スコープの違いがあり、
より下位のnamespaceに属するclassは、
直接上位に属するclassをusing宣言*2無しに使えるってのは、
interface階層と実装階層を明示的に分けても、
実装階層のクラスをコーディングし易くする為の仕様だと思っていたんですが、
違うのでしょうか…。