È una cattiva idea esporre la gerarchia di ereditarietà nella struttura dello spazio dei nomi?

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

Domanda

Ho un gruppo di classi correlate che vengono tutte sovrascritte insieme per creare un'implementazione particolare.Mi chiedo se sia una buona idea racchiudere le sottoclassi correlate in uno spazio dei nomi.

A scopo di esempio, considera i seguenti spazi dei nomi e classi:

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 è il modo migliore per strutturare gli spazi dei nomi?Sembra inevitabile esporre l'ereditarietà nello spazio dei nomi poiché le classi base non appartengono realmente né allo spazio dei nomi Protocol.Tcp né allo spazio dei nomi Protocol.Ftp.

È stato utile?

Soluzione

Penso che forse ti stai preoccupando troppo!

Ha senso logicamente?Sai dove trovare il tuo codice all'interno degli spazi dei nomi?

Preferirei di gran lunga vedere una codebase come quella sopra con un piccolo numero di classi, rilevanti per il nome con una gerarchia, piuttosto che un grande spazio dei nomi in cui tutto è correlato.

Ricorda, lo spazio dei nomi è lì proprio per questo, per organizza la tua base di codice in modo logico

Quello che hai sembra logico :)

MODIFICARE:

Come esempio:

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

;)

Altri suggerimenti

I tag originali mostrano che questo post riguarda C#, quindi l'ereditarietà multipla è irrilevante: non è possibile moltiplicare l'ereditarietà in C#.

Forse dovresti considerare la definizione di alcune interfacce che definiscono quali sono i contratti di base di a Message e un Driver sono e quindi potresti sentirti un po' più libero di usare la struttura dello spazio dei nomi per imitare le differenze tecnologiche.

Se fossi in me, definirei 2 spazi dei nomi:

Protocol

E

Protocol.Driver

Dividi lo spazio dei nomi come questo separa il "codice della libreria" rispetto al tuo "codice eseguibile / test". Creo anche i miei spazi dei nomi per abbinare la struttura della directory;darà logica alla struttura e ai file di codice dei tuoi programmi.(forse lo fai già...)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top