Pergunta

Eu tenho um grupo de classes inter-relacionadas que são substituídas para criar uma implementação específica.Estou me perguntando se é uma boa ideia incluir as subclasses inter-relacionadas em um namespace.

Para fins de exemplo, considere os seguintes namespaces e classes:

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

Qual é a melhor maneira de estruturar os namespaces?Parece inevitável expor a herança no namespace, uma vez que as classes base não pertencem realmente ao namespace Protocol.Tcp ou ao namespace Protocol.Ftp.

Foi útil?

Solução

Acho que você talvez esteja se preocupando demais!

Faz sentido logicamente?Você sabe onde encontrar seu código nos namespaces?

Eu preferiria ver uma base de código como a acima, com um pequeno número de classes, relevantes para o nome com uma hierarquia, do que um grande espaço para nome onde tudo está inter-relacionado.

Lembre-se, o namespace existe exatamente para isso, para organize sua base de código logicamente

O que você tem parece lógico :)

EDITAR:

Como um exemplo:

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

;)

Outras dicas

As tags originais mostram que esta postagem é sobre C# - portanto, herança múltipla é uma irrelevância - você não pode multiplicar herança em C#.

Talvez você deva considerar definir algumas interfaces que definam quais são os contratos básicos de um Message e um Driver são e então você pode se sentir um pouco mais livre para usar a estrutura do namespace para imitar as diferenças tecnológicas.

Se fosse eu, definiria 2 namespaces:

Protocol

e

Protocol.Driver

Dividir o espaço para nome como esse separa seu "código da biblioteca" versus o seu "código de teste executável / teste". Eu também crio meus namespaces para corresponder à estrutura do diretório;isso dará lógica à estrutura e aos arquivos de código dos seus programas.(talvez você já faça isso...)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top