2011-01-27 12 views
6

que solía poner todo en paquetes de la siguiente manera:Módulos vs capas en la estructura del paquete de Java

com.company.app.module1 
com.company.app.module2 

Pero se ha hecho AOP pointcuts difícil basada en paquetes, y dio lugar a enormes paquetes que necesitan un IDE para dar sentido de.

Así que ahora me doy cuenta de que necesito una estructura de paquete más profunda, pero estoy constantemente desgarrado. Da preferencia a los módulos, así?

com.company.app.module1.domain 
com.company.app.module1.logic 
com.company.app.module1.persistence 
com.company.app.module2.domain 
com.company.app.module2.logic 
com.company.app.module2.persistence 

o dar preferencia a las capas, como esto?

com.company.app.domain.module1 
com.company.app.domain.module2 
com.company.app.logic.module1 
com.company.app.logic.module2 
com.company.app.persistence.module1 
com.company.app.persistence.module2 

Ventajas y desventajas de cada uno?

+0

¿qué AOP estás usando? – Bozho

Respuesta

7

Módulos primero.

Tenía un proyecto que inicialmente era primero en capas, pero se volvía demasiado voluminoso para leer y mantener, por lo que lo refabricamos. También usó AOP, sin ningún problema. Acabamos de usar .. en el medio de la definición del paquete (utilizamos Spring AOP con sintaxis aspectj). Así es como se ve:

execution(* com.foo.app.modules..service..*.*(..)) 

Esto coincide tanto con modules.module1.service y modules.module2.service

+0

Excelente consejo sobre la expresión de AOP, ¡gracias! –

3

Organizar por módulo permite a los desarrolladores centrarse en conjuntos de características como la unidad de entrega en lugar de la infraestructura técnica. Ampliar su base de código es probablemente más fácil si divide las cosas en función de los módulos: algunos proyectos de código abierto cuyo código he analizado (como Artifactory y Continuum) organizaron las cosas de esta manera, pero no he examinado lo suficiente como para saber si esto es la tendencia general

Sin embargo, probablemente dependa, dependiendo del tamaño de su código base.

+0

También es una opción entre aislamiento vs. código compartido. Si vas con módulo-estructura (con todos los objetos de dominio, servicios, daos, lo que sea para funciones separadas en sus propios paquetes), ¿dónde colocas cosas que pertenecen a todos los módulos? Usted terminará creando un paquete compartido, que también contiene todos los objetos de dominio compartido, servicios, daos, lo que sea. Si hay un montón de código compartido, se hincha y puede terminar dividiéndolos en capas, de verdad. Ese es un problema al que me enfrento al menos:/ –

2

Lo admito, nunca he hecho mucho AOP (formal).

Personalmente, pondría los módulos primero.

De esta manera, si luego divide los módulos en varios archivos JAR/WAR (en un proyecto maven separado, por ejemplo), ya están en la estructura de directorios correcta para dividirlos por módulo.

1

Organizaría la jerarquía de paquetes por capa para permitir que sus herramientas funcionen. Cada módulo entraría en su propio proyecto con su propia carpeta de origen. Esto le da a su IDE y desarrolladores una agrupación fácil de orientar a los módulos, pero sus herramientas de tiempo de ejecución agrupan fácilmente a la capa orientada

1

Me puse en lugar primer módulo también, pero me parece que el hacer que usted tiene que hacer referencia a todo en todas partes. Puede ser la razón de tal confusión entre los desarrolladores.

Cuestiones relacionadas