2009-07-11 24 views
6

me gusta tratar de mantenerse organizado en el desarrollo, la agrupación * .cs relacionados vuela juntos en sus propias carpetas:C# Namespaces/Folders: ¿cuándo se está organizando demasiado/creando demasiados espacios de nombres no correctos?

->Project 
--->Enums 
--->Exceptions 
--->Extensions 
--->Providers 
--->Configuguration 
--->Design 
--->etc. 
    Manager.cs 

Como todos saben, Visual Studio, por defecto, crea un nuevo espacio de nombres para cada carpeta:

Company.Product.Enums.MyEnumClass.cs 
... 
Company.Product.Exceptions.ExceptionBase.cs 
etc. 

¿Qué tiene pros y contras?

Lo bueno es que con intellisense, resulta trivial descubrir cómo se diseñó un conjunto: usted ve todas las partes, y solo las partes que desea (en comparación con tener cada clase, enum, clases de extensión estáticas, entidad de negocios, gerente, proveedor, etc. todo en un espacio de nombres.

La desventaja es que ... al final tener que utilizar una pila real de conseguir incluye la codificación.

using Company.project.Enums; 
using Company.project.Model; 
using Company.project.Extensions; 
... 
etc. 

Y de esta manera de trabajar tiene problemas ... que se vuelven más evidentes con las extensiones ... Es uno de esos casos en los que queda claro que la forma en que voy sobre esto no es gr comer (tan fácil de olvidar para incluir el uso de extensiones, y no saber que ya había métodos para hacer lo que quería ...)

Así que ... por un lado, existe la opción de mantenerse organizado de la manera en que He estado haciendo durante años, y permitiendo que Intellisense sea la forma en que un nuevo usuario de un ensamblaje rápidamente se pone al día con su funcionalidad, y simplemente lo combina para incluir ..., la otra forma es poner todo en uno espacio de nombres ... y escribir una buena documentación sobre cómo comenzar con el ensamblado ... (más costos/y honestamente, puede que nunca se haga para proyectos pequeños, etc.)

La documentación oficial de MSDN en espacios de nombres no dar consejos sobre qué camino tomar: http://msdn.microsoft.com/en-us/library/893ke618(VS.71).aspx

Por lo tanto, antes de cambiar mi forma de ser, estoy muy interesado en lo que otros están haciendo, y por qué ... ¿qué estás haciendo y por qué exactamente?

+0

Parece que este fue preguntado por aquí: http://blogs.msdn.com/joen/archive/2004/03/15/90002.aspx –

Respuesta

9

Creo que lo está organizando incorrectamente. No organice por enum/extensión, etc. Organícese según cómo se usa el tipo. Pon los tipos relacionados juntos.

¡Además, las pautas a las que hace referencia son de los días de .NET 1.1! La clave es la V7.1 en la URL. La referencia correcta es Names of Namespaces, que es parte de Design Guidelines for Developing Class Libraries.

+0

Hola Juan: Gracias por los enlaces actualizados, que se expande sobre el tema, al menos un smidgeon. Parece que todo debe agruparse ... Y a veces eso lleva a muchas clases en un espacio de nombres. incluso considerar un ejemplo trivial, una DLL: Entidades * Negocios, * Las interfaces, que implementan BizEntities ... enumeraciones * utilizados para las propiedades de BE * Las excepciones planteadas al establecer propiedades * extensiones para el BE de. .. Ni siquiera he hablado sobre diferentes funciones/grupos aquí. Solo uno. Y sin embargo, puede llevar fácilmente a más de 80 clases en un espacio de nombres. ¿Comentarios? –

+2

No, todo debería _no_ agruparse. Debe estar organizado por área funcional del código, simplemente no por qué tipo de tipo es. –

+0

Hola John: Gracias de nuevo. Me cuesta un poco entender lo que consideras límites funcionales. Si uno tiene un ensamblado diseñado para manejar Mensajes y su siguiente fábrica de Proveedores, ¿cómo lo separaría? Todo está relacionado con Entidades comunes (Mensaje, Adjunto, Dirección, Encabezados), genera MessageExceptions comunes, usa Enums comunes (MessagePriority, Importancia, etc.) y un MessagingManager + varios Proveedores (LLBLGenBasedProvider, InMemProvider, etc.) Todo es un área de funcionalidad: Mensajes. ¿Terrones juntos, o romper en sub-NS? Y si es así, ¿qué/dónde? –

Cuestiones relacionadas