Organizando el código de las Aplicaciones .NET

La creación de cada nueva aplicación/sistema nos enfrenta a la misma situación: Proyectos vacíos (o casi vacíos) a los cuales debemos ir agregándoles archivos de manera incremental con el nuevo código. Aunque algunos opten por tener ciertos templates sobre los cuales iniciar, la situación es relativamente la misma.

organizando-solucion-vacia

Dejando de lado aplicaciones pequeñas o de corto uso, las cuales probablemente vayan a contener poco código cuya mantenibilidad no es una preocupación, es fácil ver cómo el número de archivos en cada Proyecto aumenta rápida y preocupantemente…

A lo largo de los años fui intentando resolver estos problemas realizando pequeños cambios en la organización del código. La idea de este artículo es compartir algunos de los que considero mas significativos y que me han sido de gran ayuda.

Cabe aclarar que no van a encontrar recetas mágicas, ni trucos increíbles… al contrario, en su mayoría son cosas muy simples, básicas y fáciles de realizar pero si resultan muy útiles.

Diseño en capas

Existe muchas maneras de diseñar aplicaciones en capas, todas tienen sus pros y contras. No voy a abordar este tema de manera completa, ya que en sí mismo merece un artículo completo (o incluso más de uno). Pero si quiero destacar la importancia de utilizar alguna de las estrategias de diseño en capas, ya que considero que es la manera más importante de lograr una buena organización. Y no solo a nivel “archivos” sino más bien a nivel “conceptual/lógico”.

Nombres de Proyectos

Respetar ciertas reglas para darle nombres a los Proyectos. Cada nombre esta compuesto por varias partes separadas por un punto, donde la primera parte siempre corresponde al nombre de la aplicación y las partes siguientes siguen un criterio de organización según su propósito.

organizando-nomenclatura-proyectos

Usamos entonces lo que se conoce como nombres completamente calificados que, además de darnos un poco más de entendimiento acerca del propósito del Proyecto, evita ambigüedades o colisiones de nombres con otros.

Carpetas en la Solución

Organizar los Proyectos que comparten un mismo o similar propósito mediante carpetas.

organizando-carpetas-proyectos

La utilidad de esto crece a medida que van apareciendo nuevos Proyectos que comparten los mismos propósitos. Por ejemplo, si aparecen nuevos sitios web, estos se incorporarán en la carpeta de Presentación; o si aparecen nuevos tipos de acceso a datos se incorporarán en la carpeta Datos.

Carpetas en los Proyectos / Espacios de nombres (Namespaces)

Organizar los archivos dentro de cada Proyecto en carpetas respetando criterios de agrupación conceptual o lógica.

En las primeras etapas de desarrollo, los Proyectos suelen contener pocos archivos, pero con el paso del tiempo el número de archivos crece significativamente. El problema es que, generalmente, esos archivos se agregan sin aplicar ningún tipo de organización, como se muestra a continuación:

organizando-namespaces-1

Y se puede poner peor… Pero creo que ya se entiende el punto.

Aplicando el mismo criterio de clasificación y agrupamiento de los Proyectos, podemos organizar mucho mejor nuestros archivos dentro de cada Proyecto, mediante el uso de carpetas. Esto también se traducirá en la definición automática de espacios de nombres (namespaces) para las clases, interfaces, etc. declaradas en cada archivo.

Siguiendo esta pauta podemos lograr el siguiente resultado:

organizando-namespaces-2

Vemos que no solo organizamos mejor los archivos, sino que también mejoramos el nombre completamente calificado de cada clase, interfaz, etc. y la experiencia al codificar con el Intellisense:

organizando-namespaces-3
organizando-namespaces-4

Un archivo para un fin

Usar un archivo para que contenga el código de una única clase, interfaz, enumeración, etc.

Esto generalmente se suele respetar, pero también he visto muchos casos en los que se definen varias cosas en un único archivo de código. En definitiva, el resultado final al compilar el proyecto, será siempre el mismo. Pero se trata mas bien de una cuestión de organización y limpieza.

Muchas veces uno puede verse tentado a usar un único archivo para definir varias cosas que se encuentran relacionadas, para no tener que crear tantos archivos y/o para encontrarlas a todas fácilmente en un único lugar. Pero cuando uno debe trabajar en un equipo de trabajo, es común que suceda que dos miembros del equipo necesiten modificar clases que resultan estar en un mismo archivo, y en ese contexto pueden surgir varios conflictos. O también suele suceder que no todos pueden encontrar fácilmente la ubicación del código de una determinada clase en los archivos. El utilizar un archivo para un único fin, resuelve este tipo de problemas.

Utilizando una buena estrategia de carpetas en los Proyectos, el número de archivos deja de ser un problema grave.

Uso de regiones dentro de clases

Usar regiones para organizar mejor el código dentro de una clase. Estas permiten definir bloques o secciones que pueden ser colapsadas o expandidas, para mejorar la legibilidad.

Personalmente, me resulta bastante útil utilizarlas para definir las secciones de: constantes, atributos, constructores, propiedades y métodos. Incluso en algunos casos me ha servido agregar regiones anidadas según los modificadores de acceso, por ej.: dentro de la región Métodos, tener una región para aquellos que son públicos, otra para internos y otra para privados.

organizando-regiones

Si tienen más pautas de este estilo, no duden en compartirlas en los comentarios!

Anuncios

7 comentarios en “Organizando el código de las Aplicaciones .NET

  1. Antonino Ferrando dijo:

    Muy bueno y útil.
    Sumo agregar números a las carpetas según el orden en que queremos que aparezcan listadas:

    1-Common
    2-CrossCutting
    3-Core
    4-Data
    5-Business
    6-UI

  2. Jorge Ramirez dijo:

    Crear una carpeta dentro de la solución, personalmente la llamo “Resources” o “Recursos” para almacenar toda clase de archivos referentes al proyecto, como los modelos de la base de datos, scripts, requerimientos de usuario, comunicaciones con el usuario, imagenes, y toda clase de archivos que hagan referencia al proyecto y evitar perdida de informacion dentro de nuestros computadores. Asi mismo tambien dentro de esta carpeta crear una clasificacion de archivos.

    Saludos

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s