0

適切な名前空間の設計とクラスの順序を見つけるのに問題があります。次の名前空間階層があるとします。

    MyCompany.Hardware
       - ClassA

    MyCompany.Hardware.DeviceType1
       - ClassB : ClassA

    MyCompany.Hardware.DeviceType2
       - ClassC : ClassA

    MyCompany.Hardware.Reader
       - ReaderClassC : Reader

質問:

  1. 基本クラスを常に親名前空間に配置する必要がありますか?または、子の名前空間と親の具体的な実装で?

  2. は別の名前空間にあるべきですかReaderClassC、それとも同じ名前空間にあるべきMyCompany.Hardware.DeviceType2ですか?または、「高速」アクセスのために親名前空間を優先する必要がありますか?

  3. すべての名前空間を忘れて、すべてを1つにまとめます(MyCompany.Hardware)?

うまくいけば、あなたは私が何をしようとしているのか理解しているでしょう。名前空間のデザインについて教えていただければ幸いです。

4

3 に答える 3

3

いつものように、それは好みの問題です。

(私にとっては)少しすっきりしているので、4番目のアプローチを使用することを好みます。つまり、Readerを使用している場合は、その名前空間の使用に依存します。

もちろん、名前空間の名前付けガイドライン、特に次のことを確認できます。

ネストされた名前空間は、それを含む名前空間の型に依存している必要があります。たとえば、System.Web.UI.Designのクラスは、System.Web.UIのクラスに依存します。ただし、System.Web.UIのクラスは、System.Web.UI.Designのクラスに依存しません。

于 2012-09-14T18:59:37.870 に答える
1

これはすべて、オブジェクト指向プログラミングに比較的慣れていないことを前提とした、私のアドホックなアドバイスです。あなたの質問は、議論やプログラミングスタイルの選択の対象となるデザインの領域に触れていると思います。

そうは言っても、

名前空間の主な目標の1つは、タイプをグループ化して、それらを含むクラスライブラリを参照する他の「クライアント」またはプログラムで簡単に再利用できるようにすることです。

そのことを念頭に置いて、単純化のために1つの名前空間から始めて、付加価値を付けるときに名前空間を導入することができます。

あなたの例で彼らが価値を付加しないかもしれない1つの場所はDeviceType1とDeviceType2です。私の経験では、これらは同じ名前空間に属します。

namespace Acme.Hardware {
   class Product 
   {
      public int Price { get; set; }
      public bool InStock { get; set; }
   }
   class Hammer : Product
   {
   }
   class ScrewDriver : Product
   {
   }
}

Productコーディングスタイルと名前空間がどのように交差するかの例として、私が。ではなく非常に一般的な名前をどのように使用したかに注目してHardwareProductください。ここでは一般的な名前を使用しました。これは、名前が包含using Acme.Hardwareまたは完全修飾によって使用されることを知っていたためAcme.Hardware.Productです。どちらの場合も、近くにコンテキスト情報があります。

一般に、私は最初にクラス(つまり、それらの機能と実装)に焦点を合わせ、次に名前空間に焦点を当て、それらをクラスをグループ化するための単なる便利な方法と考えます。

于 2012-09-14T19:11:36.673 に答える
0

それは他の定義に依存します-名前空間はたくさんのタイプがあるときに便利です、それで、例えばあなたがそれにClassB関連するたくさんのものを伴うなら、これのHardware1ために内部名前空間を持つことは完全に理にかなっています。

理想的には、論理的なグループ化に従う必要があります。あなたは、それが他のものに関連していて、他のReaderCものに関連しDeviceType2ていない場合、それは親名前空間にあるべきではなく、ClassAすべてのハードウェアタイプのベースである場合、それは親名前空間にもある必要があると尋ねました。

于 2012-09-14T19:02:05.613 に答える