¿Cuál es su “mejor práctica” para el primer proyecto Java EE Spring?[cerrado]

StackOverflow https://stackoverflow.com/questions/8569

  •  08-06-2019
  •  | 
  •  

Pregunta

Actualmente estoy intentando iniciarme en el desarrollo de Java EE con el marco Spring.Como soy nuevo en Spring, es difícil imaginar cómo debería comenzar un proyecto en buen funcionamiento.

Usted tiene alguna mejores prácticas, propinas o mayores NO HACER para empezar?¿Cómo empezaste con Spring: un gran proyecto o pequeñas aplicaciones tipo tutorial?¿Qué tecnología usaste de inmediato?AOP, Hibernación compleja...

¿Fue útil?

Solución

Pequeño consejo: me ha resultado útil modularizar y etiquetar claramente mis archivos de contexto Spring xml según los problemas de la aplicación.Aquí hay un ejemplo de una aplicación web en la que trabajé:

  • MyProject / src / main / resources / spring /
    • fuente de datos.xml - Mi frijol de fuente de datos única.
    • persistencia.xml - Mis DAO/Repositorios.Depende de datasource.xml frijoles.
    • servicios.xml - Implementaciones de capa de servicios.Estos suelen ser los beans a los que aplico transaccionalidad usando AOP.Depende de persistence.xml frijoles.
    • controladores.xml - Mis controladores Spring MVC.Depende de services.xml frijoles.
    • vistas.xml - Mis implementaciones de vista.

Esta lista no es perfecta ni exhaustiva, pero espero que ilustre el punto.Elija la estrategia de nomenclatura y la granularidad que mejor se adapten a sus necesidades.

En mi (limitada) experiencia, he visto que este enfoque produce los siguientes beneficios:

Arquitectura más clara

Los archivos de contexto claramente nombrados les dan a aquellos que no están familiarizados con la estructura de su proyecto un lugar razonable para comenzar a buscar definiciones de frijoles.Puede facilitar un poco la detección de dependencias circulares/no deseadas.

Ayuda al diseño del dominio.

Si desea agregar una definición de bean, pero no encaja bien en ninguno de sus archivos contextuales, ¿tal vez esté surgiendo un nuevo concepto o preocupación?Ejemplos:

  • Suponga que desea que su capa de servicio sea transaccional con AOP.¿Agregas esas definiciones de frijoles a services.xml, o ponerlos en su propio transactionPolicy.xml?Háblalo con tu equipo.¿Su política de transacciones debería ser conectable?
  • Agregue frijoles Acegi/Spring Security a su controllers.xml archivo, o crear un security.xml archivo de contexto?¿Tiene diferentes requisitos de seguridad para diferentes implementaciones/entornos?

Pruebas de integración

Puede conectar un subconjunto de su aplicación para pruebas de integración (por ejemplo:Dados los archivos anteriores, para probar la base de datos solo necesita crear datasource.xml y persistence.xml frijoles).

Específicamente, puedes anotar una clase de prueba de integración como tal:

@ContextConfiguration(locations = { "/spring/datasource.xml" , "/spring/persistence.xml" })

Funciona bien con Beans Graph de Spring IDE

Tener muchos archivos contextuales enfocados y bien nombrados facilita la creación de BeansConfigSets personalizados para visualizar las capas de su aplicación utilizando Spring IDE. Gráfico de frijoles.He usado esto antes para brindarles a los nuevos miembros del equipo una descripción general de alto nivel de la organización de nuestra aplicación.

Otros consejos

Concéntrese primero en el corazón de la primavera:Inyección de dependencia.Una vez que vea todas las formas en que se puede utilizar DI, comience a pensar en las piezas más interesantes como AOP, Remoting, Plantillas JDBC, etc.Así que mi mejor consejo es dejar que el uso de Spring crezca desde el núcleo.

¿Mejores prácticas?Si está utilizando la configuración XML estándar, administre el tamaño de los archivos individuales y coméntelos con criterio.Puede pensar que usted y otros entenderán perfectamente sus definiciones de beans, pero en la práctica es algo más difícil volver a ellas que al antiguo código Java.

¡Buena suerte!

En primer lugar, Spring tiene que ver con la modularidad y funciona mejor si uno se concentra en escribir componentes pequeños que hagan una cosa y la hagan bien.

Si sigue las mejores prácticas en general como:

  • Definir una interfaz en lugar de clases abstractas
  • Hacer que los tipos sean inmutables
  • Mantenga la menor cantidad de dependencias posible para una sola clase.
  • Cada clase debe hacer una cosa y hacerlo bien.Las grandes clases monolíticas apestan, son difíciles de probar y de usar.

Si sus componentes son pequeños y siguen los dogmas anteriores, deberían ser fáciles de conectar y jugar con otras cosas.Los puntos anteriores, naturalmente, también son válidos para el propio marco Spring.

PD

No escuches los puntos anteriores, están hablando de cómo hacer lo que sea.Es más importante aprender a pensar que a hacer algo.Los humanos pueden pensar, repetir algo no es inteligente, pensar sí lo es.

De hecho, me gustó bastante la primavera.Era una brisa de aire fresco en los Java Beans J2EE promedio.

Recomiendo implementar el ejemplo que proporciona Spring:

http://static.springframework.org/docs/Spring-MVC-step-by-step/

Además, decidí hacer full monty y agregué Hibernate a mi aplicación Spring;), porque Spring proporciona un excelente soporte para Hibernate...:)

Sin embargo, tengo algo que NO HACER, lo cual aprendí de la manera más difícil (producto en producción)...Si solo implementa la interfaz del Controlador y devuelve un objeto ModelAndView con algunos datos proporcionados con la interfaz, Spring recopila esos recursos, e intenta almacenar en caché esos datos.Así que tenga cuidado de colocar datos grandes en esos objetos ModelAndView, porque acapararán la memoria de su servidor mientras el servidor esté en el aire tan pronto como se haya visto esa página...

Comience aquí: de hecho, creo que está entre los mejores libros sobre desarrollo de software que he leído.
Expert Spring MVC y flujo web

Conozca la nueva configuración basada en anotaciones para clases MVC.Esto es parte de la primavera 2.5.El uso de clases basadas en anotaciones hará que escribir pruebas unitarias sea mucho más fácil.También es bueno poder reducir la cantidad de XML.

Ah, sí, pruebas unitarias: si estás usando Spring, MEJOR que seas pruebas unitarias.:) Escriba pruebas unitarias para todas sus clases de capa web y de servicios.

Lea sobre el diseño basado en dominios.El hecho de que pueda usar clases de Objetos de Dominio en todos los niveles de una Aplicación Spring significa que tendrá un Modelo de Dominio MUY poderoso.Aprovechalo.

Sin embargo, cuando utilice sus clases de Objeto de dominio para rellenar formularios, deberá prestar atención a las preocupaciones de seguridad recientes en torno a Spring Framework. Una discusión sobre el lado del servidor revela la forma de cerrar el agujero en los comentarios.

Una buena forma de empezar es concentrarse en "Springframework".La cartera de Spring ha crecido hasta convertirse en una gran cantidad de proyectos relacionados con diversos aspectos del software empresarial.Cíñete a lo básico al principio y trata de captar los conceptos. Descargar los binarios más recientes y consulte el ejemplo de petclinic de Spring una vez que esté familiarizado con el núcleo.Ofrece una descripción general bastante buena de los diversos proyectos que SpringSource tiene para ofrecer.

Aunque la documentación es muy buena, recomendaría un libro después de comprender los conceptos básicos.Lo que encontré problemático con la documentación es que no es detallada y no puede brindarle todos los detalles que necesita.

"... ¿Qué tecnología usaste de inmediato?AOP, Hibernación compleja..." - Yo diría que una mejor pregunta sería preguntar qué es lo que la gente no usó de inmediato.Agregaría los ejemplos que citas a esa lista.

La plantilla Spring MVC y JDBC serían mis recomendaciones iniciales.Puedes recorrer un largo camino solo con ellos.

Mi recomendación sería seguir fielmente las recomendaciones arquitectónicas de Spring.Utilice sus ideas de capas.Asegúrese de que su capa web sea completamente separable del resto.Para ello, permita que la capa web interactúe con el back-end solo a través de la capa de servicio.

Si desea reutilizar esa capa de servicio, una buena recomendación es exponerla utilizando los servicios web Spring "contrato primero".Si comienza con los mensajes XML que pasa de un lado a otro, su cliente y servidor pueden desacoplarse por completo.

El IDE con mejor soporte Spring es IntelliJ.Vale la pena gastar unos cuantos dólares.

Si bien han pasado años desde que uso Spring y no puedo decir que sea un fanático de él, sé que la herramienta App Fuse (https://java.net/projects/appfuse/) ha sido útil para ayudar a las personas a iniciarse en términos de generar todos los artefactos que necesitan para comenzar.

Spring también tiene mucho que ver con las pruebas unitarias y, por lo tanto, con la capacidad de prueba de sus clases.Básicamente, eso significa pensar en la modularización, la separación de preocupaciones, hacer referencia a una clase a través de interfaces, etc.

Si solo buscas incursionar un poco en esto y ver si te gusta, te recomiendo comenzar con la capa DAO, usando el soporte JDBC y/o Hibernate de Spring.Esto lo expondrá a muchos de los conceptos básicos, pero hágalo de una manera que sea fácil de aislar del resto de su aplicación.Esta es la ruta que seguí, y fue un buen calentamiento antes de comenzar a crear una aplicación completa con Spring.

Con el lanzamiento de Spring 2.5 y 3.0, creo que una de las mejores prácticas más importantes que podemos aprovechar ahora son las anotaciones de Spring.Las anotaciones para controladores, servicios y repositorios pueden ahorrarle mucho tiempo, permitirle centrarse en la lógica empresarial de su aplicación y, potencialmente, pueden ayudarle a convertir todos sus objetos en objetos Java antiguos (POJO).

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