質問

特定の実装を作成するために一緒にオーバーライドされる、相互に関連するクラスのグループがあります。相互に関連するサブクラスを名前空間で囲むのが得策かどうか疑問に思っています。

例として、次の名前空間とクラスを考えてみましょう。

namespace Protocol
{
  public abstract class Message { }
  public abstract class Driver { }
}
namespace Protocol.Tcp
{
  public class TcpMessage : Message { }
  public class TcpDriver : Driver { }
}
namespace Protocol.Ftp
{
  public class FtpMessage : Message { }
  public class FtpDriver : Driver { }
}

名前空間を構造化する最良の方法は何ですか?基本クラスは実際には Protocol.Tcp 名前空間にも Protocol.Ftp 名前空間にも属さないため、名前空間で継承を公開することは避けられないようです。

役に立ちましたか?

解決

たぶん心配しすぎだと思います!

それは論理的に意味がありますか?名前空間内のどこにコードがあるか知っていますか?

私は、すべてが相互に関連している 1 つの大きな名前空間よりも、階層を持つ名前に関連する少数のクラスを含む上記のようなコードベースを見たほうがはるかに好きです。

名前空間はまさにこのために存在することを忘れないでください。 コードベースを論理的に整理する

あなたが持っているものは論理的のようです:)

編集:

例として:

using System.Data;
using System.Data.Sql;

;)

他のヒント

元のタグは、この投稿が C# に関するものであることを示しています。したがって、多重継承は無関係です。C# では多重継承はできません。

おそらく、オブジェクトの基本的なコントラクトを定義するいくつかのインターフェイスを定義することを検討する必要があります。 Message そして Driver であれば、名前空間構造を使用してテクノロジーの違いを模倣するほうが、もう少し自由に感じるかもしれません。

これが私だったら、2 つの名前空間を定義します。

Protocol

そして

Protocol.Driver

このように名前空間を分けることで、"ライブラリ・コード "と "実行可能/テスト・コード "を分けることができる。 また、ディレクトリ構造に合わせて名前空間を作成する;プログラムの構造とコードファイルにロジックを与えます。(もしかしたらもうやっているかも知れません...)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top