Est-ce une mauvaise idée d'exposer la hiérarchie d'héritage dans la structure de l'espace de noms?


3

J'ai un groupe de classes inter-connexes qui sont toutes remplacées ensemble pour créer une implémentation particulière. Je me demande si c'est une bonne idée d'inclure les sous-classes interdépendantes dans un espace de noms.

À titre d'exemple, tenez compte des espaces de noms et classes suivantes:

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

Quelle est la meilleure façon de structurer les espaces de noms? Il semble inévitable d'exposer l'héritage dans l'espace de noms, car les classes de base n'appartiennent pas vraiment à l'espace de noms Protocol.Tcp ou à l'espace de noms Protocol.Ftp.

6

Je pense que vous vous inquiétez peut-être trop!

Cela a-t-il un sens logique? Savez-vous où trouver votre code dans les espaces de noms?

Je préférerais voir une base de code comme ci-dessus avec un petit nombre de classes, pertinentes au nom d'une hiérarchie, d'un grand espace de noms où tout est lié ..

Rappelez-vous, l'espace de nommage est là précisément pour ce, pour organiser votre logiquement codebase

ce que vous avez semble logique :)

EDIT:

à titre d'exemple:

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

;)


0

Si ce moi, je définirais 2 espaces de noms:

Protocol 

et

Protocol.Driver 

En divisant l'espace de noms comme celui-ci sépare votre "code de la bibliothèque" vs votre "code exécutable/test". Je crée également mes espaces de noms pour correspondre à la structure du répertoire; cela donnera de la logique à la structure et aux fichiers de code de vos programmes. (peut-être que vous le faites déjà ...)


1

Les tags d'origine montrent que ce post est sur le C# - donc l'héritage multiple est sans importance - vous ne pouvez pas multiplier l'héritage en C#. Vous devriez peut-être envisager de définir certaines interfaces qui définissent les contrats de base d'un Message et d'un Driver et vous pouvez alors vous sentir un peu plus libre d'utiliser la structure d'espace de noms pour imiter les différences technologiques.