Cómo paquetizar nuestras clases: By Feature o By Layer

Hace unos días leía este post de Manu PK sobre un tema que siempre se plantea al arrancar un proyecto y que nunca está claro cuál es la decisión más adecuada a nuestro caso, me refiero a como paquetizar nuestras clases: por funcionalidad o por Capa.

Me ha parecido una buena ocasión para para “traducir” el artículo y comentarlo (y así recordarlo para la próxima ;))

PACKAGE BY LAYER (PBL)

Cuando creamos una aplicación de las primeras cosas que hacemos es organizar en módulos y paquetes (view, controller, services, utils, entity, dao,…).

Con esta paquetización para resolver una funcionalidad o caso de uso tendré clases en cada uno de estos paquetes.

PACKAGE BY FEATURE (PBF)

En esta paquetización se crea un paquete para cada funcionalidad (caso de uso) y todas las clases quedan en ese paquete.

COMPARANDO AMBOS:

PACKAGE BY LAYER (PBL) PACKAGE BY FEATURE (PBF)
VENTAJAS -Al usar frameworks (Hibernate, JSF, Spring) en cada paquete están las clases de una tecnología

-Favorece la modularización y separación de capas en JARS

-Simplifica migración/cambio de framework

­-Paquetes con alta cohesión y modularidad

-Bajo acoplamiento entre paquetes

-Añadir una nueva funcionalidad sólo implica el uso de un directorio/paquete

-Más fácil para navegar

¿Con cuál os quedáis vosotros? Yo os puedo decir que uso ambos dependiendo del tipo de proyecto, de si prima la simplicidad y agilidad en el desarrollo (entonces uso PBF) o si prima la modularización y separación de capas (PBL).

Respuestas

  1. Hola…

    En proyectos grandes también puede ser recomendable aplicar los 2 niveles a la vez. LAYER + FEATURE. Así tenemos un poco de lo mejor de las dos estrategias, pero perdemos también cosas como el empaquetado en jar por capas… Pero como siempre, esto depende mucho de la forma de trabajar de cada uno.

    Saludos.

    1. Coincido contigo, lo normal en un proyecto grande es que organices tanto por capas como por funcionalidad, aunque también seguiría existiendo la duda de el primer paquete es el del Layer o el de la Feature? 🙂

Replica a Juankar! Cancelar la respuesta