- PR -

既存コントロールを拡張する場合の名前空間をどうしていますか?

投稿者投稿内容
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-03-02 18:48
例えば、TextBox で不足している機能やプロパティを増設する時、TextBoxクラスから
派生させた新しいクラスを作ります。
皆さんは、このクラスは、どの名前空間にしていますか?

独自の名前空間を作って、その場所におきますか?
それとも、System.Windows.Forms として、その場所におきますか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-02 19:00
引用:

R・田中一郎さんの書き込み (2006-03-02 18:48) より:

独自の名前空間を作って、その場所におきますか?
それとも、System.Windows.Forms として、その場所におきますか?


私の場合は、独自の名前空間に置きます。
会社名.物件名.[NFC に準じた分類名] にしています。
(例 : Jeanne.HogeBank.IO.* )

そもそも、名前空間は、
 CompanyName.TechnologyName[.Feature | .Design]
が一般的だとされていますが、既存の拡張となると確かに配置に困りますね。

ただ、System.Windows.Forms などには配置しないようにします。
標準のクラス ライブラリ群なのかどうかが、わかりにくくなります。
大抵、Jeanne.Windows.Forms.* などにして、何の拡張なのか推測できるようにしています。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-03-03 12:01
引用:

じゃんぬねっとさんの書き込み (2006-03-02 19:00) より:

私の場合は、独自の名前空間に置きます。
会社名.物件名.[NFC に準じた分類名] にしています。
(例 : Jeanne.HogeBank.IO.* )

そもそも、名前空間は、
 CompanyName.TechnologyName[.Feature | .Design]
が一般的だとされていますが、既存の拡張となると確かに配置に困りますね。

ただ、System.Windows.Forms などには配置しないようにします。
標準のクラス ライブラリ群なのかどうかが、わかりにくくなります。
大抵、Jeanne.Windows.Forms.* などにして、何の拡張なのか推測できるようにしています。



やはり独自の名前空間に置いているのですね。
僕もじゃんぬねっとさんと同じように、MyNameSpace.Windows.Forms.* としていたの
です。

僕はここ数日、DataGridView を拡張している訳ですが、関連する DataGridViewから
始まるクラスが大量に System.Windows.Forms に登録されているので、同じ場所に置
いた方が都合が良いんじゃないだろうか?
などと思い初めてしまいました。

でも、やはり別モノですし、System.Windows.Forms に置くべきではないですね。

ありがとうございました。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-03-03 14:48
コード:
System.Object
   System.MarshalByRefObject
      System.ComponentModel.Component
         System.Windows.Forms.Control
            System.Windows.Forms.ButtonBase
               System.Windows.Forms.Button


例えば Button はこんな階層になっていますが、System.ComponentModel.Component から継承しているからといって、System.Windows.Forms.Control を System.ComponentModel 名前空間に配置したりしていないですよね。

引用:

既存コントロールを拡張する場合の名前空間をどうしていますか?


極論で解釈すると、クラスは全て System.Object から拡張していますが、System 名前空間に配置したりしませんよね。

じゃんぬさんも仰っていますが、名前空間の先頭は機能名ではなく、作った者の名前を設定するのが一般的でしょうね。それ以降の名前空間は機能毎とかに分けるべきなのでしょう。

ちなみに。
使用されるクラスと、それを使用するクラスという主従関係が大概存在すると思いますが、使用されるクラスはより上位の名前空間に、使用するクラスはより下位の名前空間に配置します。(私は)
最初は逆のような気がして気持ち悪いのですが。

_________________
囚人のジレンマな日々
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-03 15:41
引用:

囚人さんの書き込み (2006-03-03 14:48) より:

使用されるクラスと、それを使用するクラスという主従関係が大概存在すると思いますが、使用されるクラスはより上位の名前空間に、使用するクラスはより下位の名前空間に配置します。(私は)


フォローです。
名前空間だけに限らずクラスに関しても同様のことが言えます。

たとえば、アイテムとコレクションの関係である場合は、
クラス内にネストしたりするのですが、コレクションの方が下位になります。
これは、既存の Framework を見てもそのようになっています。

# アイテムとコレクションは極端ですが、良い例が思いつかなかった...

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-03-03 17:02
引用:

囚人さんの書き込み (2006-03-03 14:48) より:

例えば Button はこんな階層になっていますが、System.ComponentModel.Component から継承しているからといって、System.Windows.Forms.Control を System.ComponentModel 名前空間に配置したりしていないですよね。



なるほど。確かにその通りですね。
やはり、今までどおり、R.TANAKA.ICHIRO.Windows.Forms.* にしようと思います。

引用:

囚人さんの書き込み (2006-03-03 14:48) より:

使用されるクラスと、それを使用するクラスという主従関係が大概存在すると思いますが、使用されるクラスはより上位の名前空間に、使用するクラスはより下位の名前空間に配置します。(私は)
最初は逆のような気がして気持ち悪いのですが。



そうですね。ちょっと気持ち悪いですよね。
慣れの問題でしょうか。

ありがとうございました。
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-03-03 17:07
引用:

じゃんぬねっとさんの書き込み (2006-03-03 15:41) より:

名前空間だけに限らずクラスに関しても同様のことが言えます。

たとえば、アイテムとコレクションの関係である場合は、
クラス内にネストしたりするのですが、コレクションの方が下位になります。



え、そうなんですか。何か本当に気持ち悪いですね。

引用:

じゃんぬねっとさんの書き込み (2006-03-03 15:41) より:

これは、既存の Framework を見てもそのようになっています。



よくじゃんぬねっとさんは、Framework を参照しなさいと言いますが、具体的に
どのように見るのでしょうか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-03 17:20
引用:

R・田中一郎さんの書き込み (2006-03-03 17:07) より:

え、そうなんですか。何か本当に気持ち悪いですね。


そのクラス (アイテム) に依存したコレクションですからね。(^^)

引用:

よくじゃんぬねっとさんは、Framework を参照しなさいと言いますが、
具体的にどのように見るのでしょうか?


真面目な話、オブジェクト ブラウザですよ。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

スキルアップ/キャリアアップ(JOB@IT)