El C # espacio de nombres y convenciones de nomenclatura clase / subclase cuando el espacio de nombres superior contiene la clase de base y espacios de nombres internos contienen sub-clases

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

Pregunta

Estoy tratando de diseñar una biblioteca de clases para una aplicación particular de la ingeniería y estoy tratando de asegurar que mis clases de espacio de nombres y convenciones de nombres tienen sentido.

Tengo la siguiente situación:

namespace Vehicle{

    class Wheel{...} //base class for Wheel objects
    class Engine{...} //base class for Engine objects
    ...
    namespace Truck{ 
        class Wheel: Vehicle.Wheel{...} //Truck specific Wheel object
        class Engine: Vehicle.Engine{...} //Truck specific Engine object
        ...
    }

    namespace Car{ 
        class Wheel: Vehicle.Wheel{...} //Car specific Wheel object
        class Engine: Vehicle.Engine{...} //Car specific Engine object
        ...
    }
    ...
}

El código se utiliza de manera que tendrá que ser referenciado desde dentro del mismo ámbito todas estas clases. La siguiente situación sería probable:

...
Vehicle.Wheel.DoSomething();
Vehicle.Truck.Wheel.DoSomething();
Vehicle.Car.Wheel.DoSomething();
...

En estas circunstancias, estoy mejor dar las clases de nombres más específicos

namespace Car{
    class CarWheel: Vehicle.Wheel{...} //Car specific Wheel object
    ...
}

o salir de la nomenclatura como se muestra en el primer ejemplo y confiar en la información que está codificado en el espacio de nombres para mayor claridad? Bajo este último enfoque, supongo que me gustaría utilizar alaising para mayor claridad en el código que hace uso de esta biblioteca, corret?

Parece redundent tener:

Vehicle.Car.CarWheel

o

Vehicle.Truck.TruckEngine

pero también quiero tener nombres de clase muy descriptivos y específicos.

La filosofía de lo que estoy preguntando es si se incluye o no el espacio de nombres como parte del nombre de la clase cuando se considera si un nombre de clase es lo suficientemente descriptivo.

¿Fue útil?

Solución

Por lo general los espacios de nombres están en plural, a fin de no chocar con los nombres de clase (por ejemplo, es probable que usted quiere clases denominadas Vehicle y Car) así que me gustaría estar inclinado a usar espacios de nombres de la siguiente manera:

namespace Vehicles;
namespace Vehicles.Cars;
namespace Vehicles.Trucks;

En cuanto a los nombres de las clases, que sería típico para prefijar el nombre de la clase con la especialización, sobre todo si son susceptibles de ser utilizados en conjunto, por lo que iba a terminar con algo como:

class CarWheel : Wheel
class TruckWheel : Wheel

Se puede ver este tipo de 'despido' por todas partes en el .NET Framework, por ejemplo, en el espacio de nombres System.Xml prácticamente todas las clases tienen el prefijo Xml, o en el espacio de nombres System.Data.SqlClient mayoría de las clases tienen el prefijo Sql. Esto significa que puede importar los espacios de nombres con la directiva using y luego no tener que calificar totalmente los nombres de clase en todo el código, por ejemplo, cuál de los siguientes es más fácil de leer?

Vehicles.Cars.Wheel wheel = new Vehicles.Cars.Wheel();

o

CarWheel wheel = new CarWheel();

Es obvio lo que ambos están haciendo, pero la segunda es considerablemente más corto.


Tenga en cuenta que si usted incluye la especialización en el nombre, entonces es posible que usted no necesita todos los espacios de nombres anidados (.Cars, .Trucks, etc.) que pueden llegar a ser dolorosa si se utilizan generalmente juntos, y por lo todos los archivos de usarlos tendría que importar todos los espacios de nombres, por ejemplo

using Vehicles;
using Vehicles.Cars;
using Vehicles.Trucks;
using Vehicles.SomethingElse;
using Vehicles.YetAnotherThing;

Si usted encuentra esta misma pila de directivas using es en la parte superior de cada archivo, y luego colapsar las clases hacia abajo en un único espacio de nombres. Por lo general, incluye toda la funcionalidad relacionada que se espera que sean utilizados conjuntamente en un único espacio de nombres, y sólo utilizar los anidados para la funcionalidad que se extiende el espacio de nombres base, pero se usa con menos frecuencia.

Otros consejos

Me intente para evitar la reutilización de nombres a través de diferentes espacios de nombres, sobre todo si un cliente lo desea, puede utilizar tanto en el mismo programa.

¿Usted realmente necesita un espacio de nombres para Car, Truck etc? Todos estos espacios de nombres suenan más como deberían ser clases que namespacese. Tal vez en su situación real que tiene más sentido, aunque ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top