2009-01-31 25 views
7

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

Entonces, ¿qué tengo curiosidad por saber es

  • Hay alguien al tanto de cualquier guías de buenas prácticas para el diseño de un proyecto Java Web?
  • ¿Alguien tiene un conjunto particular de reglas estrictas que siempre siguen para diferentes tipos de proyectos?
  • ¿La gente tiende a dividir paquetes por las diferentes capas, como presentación, negocios y aplicación?

Respuesta

3

Para continuar 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 a 3 capas lógicas.

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

En segundo lugar, hay una capa para la capa de acceso hibernate modelo/db. 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 clases de hibernación, así que las coloco en la misma área que los objetos de dao. P.ej. com.sample.model contiene los objetos de datos de hibernación y com.sample.model.dao contiene los objetos dao.

Si utilizo jdbc directo (generalmente con Spring), a veces me resulta más conveniente acercar los objetos de datos a la capa de lógica de negocios en lugar de a la capa de acceso de db.

(El resto de las cosas normalmente cae bajo la capa de negocios).

2

primer lugar, el seguir la estructura convencional de un IDE popular, ala Eclipse, Netbeans, etc. En Eclipse, por ejemplo, todo está ya dispuesto con una WEB-INF y META-INF carpetas, por lo que los envases y la implementación es fácil. El código fuente de las clases (generalmente bajo src) se copia automáticamente a WEB-INF/classes. Hay algunas otras consideraciones:

  1. Si está utilizando MVC, entonces es posible que no se necesita para acceder directamente a las JSP. De ser así, mantenga el código fuente JSP bajo WEB-INF/jsp, por razones de seguridad.
  2. De manera similar, mantenga los archivos de etiquetas personalizadas en etiquetas WEB-INF /.
  3. Mantenga los archivos javascript en la carpeta js, 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 el código en paquetes según las capas. Obviamente, sus datos de Hibernate no necesitan estar en el mismo paquete que sus servlets.
  5. Si termina con demasiados servlets en el mismo paquete, considere subenvasarlos de acuerdo a la funcionalidad, pero es bueno que tengan un paquete ancestro común: ayuda con la legibilidad.
+0

Prefiero WEB-INF/contenido o WEB-INF/vista, quién sabe cuál es o podría ser la tecnología de presentación ... –

+0

correcto, gracias por señalarlo. Siempre que estén almacenados en WEB-INF ... – Yoni

+0

Algunos buenos puntos hay Yoni. Sin embargo, todavía estoy interesado en las opiniones de las personas sobre cómo el directorio src se debe estructurar con paquetes, también se pondrían los servlets en un paquete llamado presentación ya que se llaman principalmente contenido JSP. –

6

Realmente depende de su marco web.

Por ejemplo, si utiliza Wicket, archivos de Java y páginas web coexisten en el mismo directorio, mientras que en la mayoría de otros marcos, páginas (archivos .jsp o lo que es su presentación motor) y de código subyacente cosas (archivos de Java) están completamente separados.

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

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

Mi única buena sugerencia (que no es mencionado por Yoni) para el directorio src es para hacer paquetes de acuerdo al propósito de negocios y no según 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 NOT

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

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

+0

@kazanaki Desafortunadamente en este proyecto solo estoy usando MVC simple, sin marco. Ya tengo mi directorio src estructurado de acuerdo con las reglas de maven. Con el diseño de su paquete, usted sub paquete que en absoluto en las diferentes capas o simplemente desglosar en Sub Propósitos. –

+0

Los subpaquetes @Mark son capas. Por ejemplo, doy a los clientes clientes.acciones, clientes.servlets, clientes.entidades e.t.c. Pero en un proyecto realmente grande, los subpaquetes pueden ser subpropósitos como usted dice. No hay una respuesta correcta allí en mi humilde opinión – kazanaki

0

Uso del Maven webapp archetype layout.

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

He incluido la carpeta java en el ejemplo aquí, tal vez era obvio, pero fue dejado en el enlace anterior para alguna razón.

Cuestiones relacionadas