Pregunta

Estoy comenzando un nuevo proyecto web Java que utiliza Hibernate y una arquitectura MVC estándar. Acabo de comenzar a diseñar la estructura de los proyectos y, mientras lo hacía, comencé a mirar a mi alrededor para ver si había algún estándar en esta área, sobre dónde deberían ir los Controladores y, en general, la mejor manera de diseñar todo. Sin embargo, realmente no he encontrado ninguna guía.

Entonces, lo que tengo curiosidad por saber es

  • ¿Alguien conoce alguna guía de mejores prácticas para el diseño de un Proyecto Web Java?
  • ¿Alguien tiene un conjunto particular de reglas estrictas que siempre siguen para diferentes tipos de proyectos?
  • ¿Las personas tienden a dividir los paquetes por las diferentes capas como presentación, negocio y aplicación?
¿Fue útil?

Solución

Para continuar con mi respuesta anterior, tengo muchos proyectos web. En todos ellos, la estructura bajo src es más o menos la misma. Los paquetes están aproximadamente separados en 3 capas lógicas.

Primero está la capa de presentación, como usted dijo, para servlets, oyentes de aplicaciones y ayudantes.

Segundo, hay una capa para la capa de acceso de modelo / base de datos de hibernación. La tercera capa para la lógica de negocios. Sin embargo, a veces el límite entre estas capas no está claro. Si está utilizando hibernate para acceder a db, entonces el modelo está definido por las clases de hibernate, por lo que los coloco en la misma área que los objetos dao. P.ej. com.sample.model contiene los objetos de datos de hibernación y com.sample.model.dao contiene los objetos dao.

Si usa jdbc directo (generalmente con Spring), a veces me parece más conveniente colocar los objetos de datos más cerca de la capa de lógica de negocios que con la capa de acceso de db.

(El resto de las cosas generalmente se incluyen en la capa empresarial).

Otros consejos

Realmente depende de su marco web.

Por ejemplo, si usa Wicket, los archivos java y las páginas web coexisten en el mismo directorio mientras en la mayoría de los otros marcos, páginas (archivos .jsp o lo que sea su motor de presentación) y el código subyacente (archivos java) está completamente separado.

Entonces lea la documentación que viene con su marco (Spring MVC, Struts, JSF e.t.c).

Otra buena propuesta es usar Arquetipos de Maven para generar un esqueleto para su marco específico. Algunos marcos web (como seam) tienen incluso su propia herramienta de generación de código que sienta las bases para su proyecto web.

Mi única buena sugerencia (que Yoni no menciona) para el directorio src es hacer paquetes de acuerdo con el propósito comercial y NO de acuerdo con el tipo / capa

Eso significa paquetes para

  • com.mycompany.myproject.customers
  • com.mycompany.myproject.departments
  • com.mycompany.myproject.billing
  • com.mycompany.myproject.reports
  • com.mycompany.myproject.admin

y NO

  • com.mycompany.myproject.entities
  • com.mycompany.myproject.tables
  • com.mycompany.myproject.graphs
  • com.mycompany.myproject.dialogs
  • com.mycompany.myproject.servlets

La segunda estructura es demasiado genérica, tiende a resolverse alrededor de paquetes enormes con cosas no relacionadas y es difícil de mantener.

Primero, seguir la estructura convencional de un ide popular, ala Eclipse, Netbeans, etc. En Eclipse, por ejemplo, todo ya está organizado con las carpetas WEB-INF y META-INF, por lo que el empaquetado y la implementación son fáciles. El código fuente de las clases (generalmente bajo src) se copia automáticamente en WEB-INF / classes. Hay algunas otras consideraciones:

  1. Si está utilizando MVC, entonces es posible que no necesite acceder a sus JSP directamente. Si es así, mantenga el código fuente JSP en WEB-INF / jsp, por razones de seguridad.
  2. Del mismo modo, mantenga los archivos de etiquetas personalizadas en WEB-INF / tags.
  3. Mantenga los archivos javascript en la carpeta js, los archivos css en la carpeta de estilo, etc. Todas las carpetas deben estar al mismo nivel que WEB-INF para imitar una implementación real.
  4. Es bueno separar su código en paquetes de acuerdo a las capas. Obviamente, sus datos de Hibernate no necesitan estar en el mismo paquete que sus servlets.
  5. Si terminas con demasiados servlets en el mismo paquete, considera subenvasarlos de acuerdo con la funcionalidad, pero es bueno que tengan un paquete ancestral común: ayuda con la legibilidad.

Utilice el diseño del arquetipo de webapp Maven.

project
|-- pom.xml
`-- src
    `-- main
        |-- java
        `-- webapp
            |-- WEB-INF
            |   `-- web.xml
            `-- index.jsp

He incluido la carpeta java en el ejemplo aquí, tal vez fue obvio, pero por algún motivo se dejó de lado en el enlace anterior.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top