Buenas prácticas en la construcción de la capa de negocio con Spring

LIBP-0339 (Libro de pautas)

Tener en cuenta las siguientes indicaciones para la construcción de la capa de negocio de aplicaciones basadas en Spring

Tradicionalmente uno de los mayores problemas en el uso del framework Spring ha sido su complejidad en la creación y mantenimiento del XML que contiene la configuración. Aunque desde hace algunas versiones el framework permite el uso de annotaciones, si aún se quiere mantener la configuración de la aplicación en XML o de forma mixta (parte en xml y parte en anotacions) hay que tener en cuenta algunas buenas prácticas.

Pautas

TítuloCarácter
Servicios o aspectosRecomendada
Dependencias basadas en "Setters"Recomendada
Declaración de beansRecomendada
Tratamiento de excepcionesRecomendada
Herencia de serviciosRecomendada
Lógica de negocio en los aspectosNo Recomendada
Inclusión de libreríasRecomendada
Formas abreviadas de configuraciónObligatoria
Argumentos del constructorRecomendada
Herencia entre beansObligatoria
Integración de archivos de configuraciónObligatoria
Identificadores de beansObligatoria
Dependency-check en desarrolloRecomendada
Descripciones en el encabezadoObligatoria
Motor de inyección de dependenciasObligatoria

Servicios o aspectos

Modularizar los aspectos o servicios

Se recomienda modularizar aquellos aspectos o servicios que sean utilizados repetidas veces en diferentes componentes de un sistema. De esta forma se podrán aplicar de manera declarativa a los componentes que los precisen.

Dependencias basadas en "Setters"

Crear las inyecciones de dependencias basadas en métodos "setters"

Se recomienda crear las inyecciones de dependencias por métodos "setters", en lugar de hacerlo mediante los constructores, ya que es más flexible, sobre todo cuando la clase tiene muchas propiedades y la mayoría son opcionales.

Declaración de beans

Declarar beans para cada DAO

Se recomienda declarar beans para cada DAO, así como para implementar la fachada y la factoría de sesiones que usan los DAOs.

Tratamiento de excepciones

Seguir la jerarquía de excepciones de Spring

Las aplicaciones deben seguir la jerarquía de excepciones de Spring para su tratamiento en la capa de negocio. Para realizar la conversión entre las excepciones nativas y la jerarquía propia de Spring será necesario declarar el siguiente bean:

<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>

Herencia de servicios

Crear servicios que hereden de una clase común

Se recomienda que todos los servicios hereden de una clase común, para así poder aplicar comportamientos genéricos sin impacto.

Lógica de negocio en los aspectos

No incluir lógica de negocio en los aspectos

Se recomienda altamente no incluir negocio en los aspectos.

Inclusión de librerías

No incluir las bibliotecas spring-aop.jar y spring-dao.jar

A la hora de añadir las bibliotecas de Spring en nuestro proyecto,tenemos que asegurarnos que, si se tiene el JAR spring.jar, no se tienen que añadir también las bibliotecas spring-aop.jar y spring-dao.jar, ya que ambas están contenidas en la primera.

Formas abreviadas de configuración

Usar formas abreviadas en la configuración

Se deben utilizar las formas abreviadas para la configuración ya que son más fáciles de leer, dado que transforma el valor de los elementos hijos en atributos del elemento padre, lo que proporciona archivo XML mucho más claro.

Argumentos del constructor

Utilizar type en vez de index para los argumentos del constructor

Se debe utilizar el atributo type para los argumentos de los constructores ya que es más fácil de leer y evita errores. Sólo se utilizará el atributo index para resolver los problemas de ambigüedad cuando un constructor tiene más de un argumento del mismo tipo o cuando se utiliza el atributo value para asignar el valor.

Herencia entre beans

Utilizar el mecanismo de pseudo-herencia que ofrece Spring

Se debe utilizar el mecanismo de pseudo-herencia que ofrece Spring para reducir la duplicación de información en los archivos de configuración. Una definición de un bean hijo puede heredar la información de configuración de sus padres, los cuales sirven como una plantilla para estos.

Integración de archivos de configuración

Integrar archivos de configuración mediante ApplicationContext y no utilizando import

La integración de distintos archivos de configuración se hará a través del ApplicationContext ya que es mucho más flexible que hacerlo dentro del XML utilizando imports, haciendo que la configuración XML sea más fácil de manejar.

Identificadores de beans

Utilizar ids como identificadores de los beans

Debemos utilizar ids como identificadores de los beans ya que, aunque no aumentan la legibilidad, pueden permitir que el analizador XML valide las referencias de los beans. Se usarán nombres como identificadores de beans si los ids no pueden ser utilizados debido a alguna restricción XML IDREF. Esta restricción dice que los ids deben comenzar con una letra (o alguno de los pocos caracteres de signo de puntuación permitidos en la especificación XML) seguido de letras, dígitos, guiones, guiones bajos, dos puntos o punto.

Dependency-check en desarrollo

Usar dependency-check durante la fase de desarrollo

Se recomienda utilizar las validaciones de dependencias en desarrollo, ya que es muy útil cuando todas las propiedades de un bean deben ser asignadas explícitamente (o por autowiring).

Descripciones en el encabezado

Agregar una descripción en el encabezado de cada archivo de configuración

Se recomienda agregar un encabezado en los archivos de configuración que englobe a los beans definidos en el archivo. Además, se recomienda usar identificadores y nombres descriptivos en vez de utilizar comentarios en los archivos de configuración.

Motor de inyección de dependencias

No abusar de la creación de objetos a través del motor de inyección de dependencias

No se debe abusar de la creación de objetos a través del motor de inyección de dependencias ya que los archivos de configuración pueden sobrecargarse mucho si no se controla bien el crecimiento de los beans definidos, haciéndolos muy complicados.

Contenidos relacionados

Recursos
Área: Desarrollo » Construcción de Aplicaciones por Capas » Capa de Negocio
Código Título Tipo Carácter
RECU-0169 Estudio comparativo entre JBoss Seam y Spring Técnica Recomendado
RECU-0142 Spring Manual Recomendado