Это плохая идея, чтобы представить иерархию наследования в структуре пространства имен?

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

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

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.

20.08.2008 19:12:05
3 ОТВЕТА
РЕШЕНИЕ

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

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

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

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

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

РЕДАКТИРОВАТЬ:

В качестве примера:

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

;)

6
20.08.2008 19:24:42

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

Protocol

и

Protocol.Driver

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

0
20.08.2008 19:20:35

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

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

1
23.09.2008 21:52:37