Сведения о вопросе

PASHA

07:40, 9th August, 2020

Теги

c#   oop   inheritance   naming   convention    

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

Просмотров: 433   Ответов: 3

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

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

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.



  Сведения об ответе

dump

21:06, 1st October, 2020

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

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

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

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

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

EDIT:

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

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


  Сведения об ответе

baggs

23:20, 23rd August, 2020

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

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


  Сведения об ответе

SEEYOU

00:42, 2nd August, 2020

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

Protocol

и

Protocol.Driver

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться