У меня есть группа взаимосвязанных классов, которые все переопределены вместе, чтобы создать конкретную реализацию. Мне интересно, если это хорошая идея, чтобы заключить взаимосвязанные подклассы в пространство имен.
В качестве примера рассмотрим следующие пространства имен и классы:
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.
Я думаю, что вы, возможно, слишком беспокоитесь!
Имеет ли это смысл логически? Вы знаете, где найти свой код в пространствах имен?
Я бы предпочел увидеть кодовую базу, подобную приведенной выше, с небольшим количеством классов, относящихся к имени с иерархией, а не с одним большим пространством имен, где все взаимосвязано.
Помните, пространство имен предназначено именно для этого, чтобы логически организовать вашу кодовую базу
Что у вас кажется логичным :)
РЕДАКТИРОВАТЬ:
В качестве примера:
using System.Data;
using System.Data.Sql;
;)
Если бы это был я, я бы определил 2 пространства имен:
Protocol
и
Protocol.Driver
Разделение пространства имен таким образом отделяет ваш «библиотечный код» от вашего «исполняемого / тестового кода». Я также создаю свои пространства имен, чтобы соответствовать структуре каталогов; это придаст логику структуре ваших программ и кодовым файлам. (может быть, вы уже делаете это ...)
Оригинальные теги показывают, что этот пост о C # - поэтому множественное наследование не имеет значения - вы не можете умножить наследование в C #.
Может быть, вам стоит подумать об определении некоторых интерфейсов, которые определяют основные контракты a Message
и a Driver
, и тогда вы можете почувствовать себя свободнее в использовании структуры пространства имен для имитации технологических различий.