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

StackOverflow https://stackoverflow.com/questions/18608

Вопрос

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

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

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 { }
}

Каков наилучший способ структурирования пространств имен?Кажется неизбежным раскрывать наследование в пространстве имен, поскольку базовые классы на самом деле не принадлежат ни к протоколу.Пространство имен Tcp, ни к протоколу.Пространство имен Ftp.

Это было полезно?

Решение

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

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

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

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

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

Редактировать:

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

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

;)

Другие советы

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

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

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

Protocol

и

Protocol.Driver

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top