Это плохая идея, чтобы представить иерархию наследования в структуре пространства имен? - PullRequest
4 голосов
/ 20 августа 2008

У меня есть группа взаимосвязанных классов, которые все переопределены вместе, чтобы создать конкретную реализацию. Мне интересно, стоит ли заключать взаимосвязанные подклассы в пространство имен.

В качестве примера рассмотрим следующие пространства имен и классы:

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.

Ответы [ 3 ]

6 голосов
/ 20 августа 2008

Я думаю, вы, возможно, слишком беспокоитесь!

Это логично? Вы знаете, где найти свой код в пространствах имен?

Я бы предпочел увидеть кодовую базу, подобную приведенной выше, с небольшим количеством классов, относящихся к имени с иерархией, чем одно большое пространство имен, где все взаимосвязано ..

Помните, что именно для этого существует пространство имен, чтобы организовывать вашу кодовую базу логически

То, что у вас есть, кажется логичным:)

EDIT:

Как пример:

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

;)

1 голос
/ 24 сентября 2008

Оригинальные теги показывают, что этот пост о C # - поэтому множественное наследование не имеет значения - вы не можете умножить наследование в C #.

Возможно, вам следует подумать об определении некоторых интерфейсов, которые определяют основные контракты Message и Driver, и тогда вы можете почувствовать себя свободнее в использовании структуры пространства имен для имитации технологических различий.

0 голосов
/ 20 августа 2008

Если бы это был я, я бы определил 2 пространства имен:

Protocol

и

Protocol.Driver

Разделение пространства имен таким образом отделяет ваш «библиотечный код» от вашего «исполняемого / тестового кода». Я также создаю свои пространства имен, чтобы соответствовать структуре каталогов; это придаст логику структуре ваших программ и кодовым файлам. (может быть, вы уже делаете это ...)

...