Pautas para el nombre y el nombre de la clase

15

Tengo problemas para nombrar mis clases y servicios correctamente cuando se utilizan utils y otras clases de ayuda.

¿Cómo estructurarías lo siguiente?

EventService.cs
EventServiceUtils.cs
EventServiceValidators.cs
EventServiceCoordinator.cs

etc ...

Tengo varios servicios con las mismas necesidades que el servicio anterior. Un pensamiento es separar todo esto en un espacio de nombres adecuado, haciendo que se vea algo como esto:

Services.EventService.EventService.cs //(the actual service)
Services.EventService.Validators.DateValidator.cs
Services.EventService.Validators.ParticipantValidator.cs
Services.EventService.Coordinators.ParticipantCoordinator.cs
Services.EventService.ExtensionMethods.Extensions.cs

y así sucesivamente. Cada espacio de nombres es, por supuesto, una carpeta separada. Pero esto no se siente al 100%, ya que probablemente haya más DateValidators en los otros servicios, lo que puede llevar fácilmente a una referencia no deseada.

Y también el Services.EventService.EventService.cs incluye el nombre de la clase en el espacio de nombres, lo cual tampoco es bueno. Podría usar Services.Event.EventService.cs , pero por supuesto ya existe una entidad con ese nombre.

Este es el modelo de dominio.

    
pregunta Mattias 07.09.2011 - 17:55
fuente

3 respuestas

5

Creo que lo mejor que puedes hacer para mejorar tu espacio de nombres aquí es eliminar Service de tu espacio de nombres EventService . También ajustaría los espacios de nombres para que fueran más así:

Services.Events.EventService.cs //(the actual service)
Services.Events.EventExtensions.cs
Services.Events.ParticipantCoordinator.cs
Services.Validators.DateValidator.cs
Services.Validators.ParticipantValidator.cs

Todavía creo que podría necesitar alguna mejora.

Solía gustarme los espacios de nombres, pero hoy en día creo que menos es más. Anidar profundamente sus espacios de nombres puede hacer que su código sea demasiado detallado, y dividir las cosas para reducir su capacidad de herencia. En su código, por ejemplo, una clase DateValidator podría usarse fácilmente en otro lugar, por lo que no debería tener muchos espacios de nombres encima, ya que los servicios que no sean EventService ahora pueden aprovechar una clase DateValidator. Lo mismo se aplica a los métodos de extensión. No hay tiempo (que pueda ver) donde necesite ver todos sus métodos de extensión al mismo tiempo, por lo tanto, tiene más sentido agruparlo con lo que se relaciona. En este caso, EventExtensions probablemente se enlaza a su EventService , por lo que, lógicamente, deberían estar juntos en mi opinión.

    
respondido por el Karl Nicoll 07.09.2011 - 22:43
fuente
5

¿Por qué no lees Pautas generales de nombres y Pautas para el nombre del espacio de nombre de Microsoft para seguir un patrón universal.

Creo que la fórmula <Company>.(<Product>|<Technology>)[.<Feature>][.<Subnamespace>] simplemente funciona bien.

    
respondido por el Saeed Neamati 09.09.2011 - 06:51
fuente
2

El diseño apropiado del espacio de nombres considerará el diseño lógico y físico.

Aunque la razón original para los espacios de nombres fue principalmente para evitar choques de nombres entre los nombres de los objetos y los métodos, se ha convertido en un elemento importante en la arquitectura y el diseño de la solución en general. No solo desea que su jerarquía conceptual y su diseño lógico tengan sentido, sino que probablemente también desee que su código se empaquete ordenadamente en bibliotecas bien diseñadas y fácilmente reutilizables que se puedan incluir fácilmente en otros proyectos y productos más adelante. Ese es quizás el resultado deseado de un buen diseño físico.

Observe el .NET Framework y cómo se le proporcionan unidades de funcionalidad relacionada en ensamblajes de tamaño razonable. Puede colocar una referencia y una declaración de uso y, de repente, tiene disponible una funcionalidad relevante sin tener que arrastrar ningún número de fregaderos de cocina. Esto se debe a que el diseño físico de .NET Framework, incluido el espaciado inteligente de nombres, ha empaquetado código relacionado lógicamente en unidades implementables relacionadas físicamente. Al crear un excelente mapeo entre espacios de nombres y ensamblajes, los arquitectos y desarrolladores del marco .NET de Microsoft hicieron su trabajo mucho más fácil (por supuesto, algunos pueden argumentar lo contrario, pero estoy bastante contento con lo que hicieron).

El espacio de nombres en C # es bastante arbitrario, en realidad. Puede colocar espacios de nombres en los lugares más extraños, en ensamblajes muy alejados unos de otros. Cualquier disciplina útil en esta área es realmente su contribución personal a un producto de software bien organizado. No me atrevería a aconsejarle exactamente qué hacer en cada caso. Lo que espero lograr, en esta respuesta, es hacer que piense en el diseño físico y en el diseño lógico cuando defina sus espacios de nombres. Cuanto más se mantengan las cosas relacionadas lógicamente y se distribuyan (físicamente), más fácil será más adelante, tanto para usted como para otras personas que quizás necesiten lidiar con su código algún día.

¡Entonces, piense cómo se empaquetará su código en ensamblajes y componentes cuando resuelva sus problemas de espacios de nombre!

    
respondido por el John Tobler 09.09.2011 - 00:58
fuente

Lea otras preguntas en las etiquetas