Skip to content

6. Spring para configurar aplicaciones de tres capas

En este artículo nos proponemos estudiar, a través de un ejemplo, cómo se puede utilizar Spring para configurar aplicaciones de tres capas. Un ejemplo habitual de este tipo de aplicaciones son las aplicaciones web.

6.1. El problema

Queremos construir una aplicación de tres capas con la siguiente estructura:

  • las tres capas serán independientes gracias al uso de interfaces
  • la integración de las tres capas se llevará a cabo mediante Spring
  • Se crearán paquetes separados para cada una de las tres capas, que se denominarán [control], [domain] y [dao]. Un paquete adicional, [tests], contendrá las aplicaciones de prueba.

6.2. La capa de acceso a los datos

La capa DAO implementará la siguiente interfaz:

Namespace istia.st.spring3tier.dao
    Public Interface IDao
         ' Hacer algo en la capa [dao]
        Function doSomethingInDaoLayer(ByVal a As Integer, ByVal b As Integer) As Integer
    End Interface
End Namespace
  • Escribir dos clases Dao1Impl1 y Dao1Impl2 que implementen la interfaz IDao. El método Dao1Impl1. doSomethingInDaoLayer devolverá a+b y el método Dao1Impl2. doSomethingInDaoLayer devolverá a-b.
  • Escribir una clase de prueba NUnit que pruebe las dos clases anteriores

6.3. La capa de negocio

La capa de negocio implementará la siguiente interfaz:

Namespace istia.st.spring3tier.domain
    Public Interface IDomain
         ' hacer algo en la capa [domain]
        Function doSomethingInDomainLayer(ByVal a As Integer, ByVal b As Integer) As Integer
    End Interface
End Namespace
  • Escribir dos clases Domain1Impl1 y Domain1Impl2 que implementen la interfaz IDomain. Estas clases tendrán un campo privado de tipo IDao que se podrá inicializar mediante una propiedad pública. El método doSomethingInDomainLayer de la clase [DomainImpl1] incrementará a y b en una unidad y, a continuación, pasará estos dos parámetros al método doSomethingInDaoLayer del objeto de tipo IDao1 recibido. El método doSomethingInDomainLayer de la clase [Domain1Impl2elle] decrementará a y b en una unidad antes de hacer lo mismo.
  • Escribir una clase de prueba NUnit que pruebe las dos clases anteriores

6.4. La capa de interfaz de usuario

La capa de interfaz de usuario implementará la siguiente interfaz:

Namespace istia.st.spring3tier.control
    Public Interface IControl
         ' hacer algo en la capa [control]
        Function doSomethingInControlLayer(ByVal a As Integer, ByVal b As Integer) As Integer
    End Interface
End Namespace
  • Escribir dos clases Control1Impl1 y Control1Impl2 que implementen la interfaz IContro1. Estas clases tendrán un campo privado de tipo IDomain que se podrá inicializar mediante una propiedad pública. El método doSomethingInControlLayer de la clase [Control1Impl1] incrementará a y b en una unidad y, a continuación, pasará estos dos parámetros al método doSomethingInDomainLayer del objeto de tipo IDomain1 recibido. El método doSomethingInControlLayer de la clase [Control11Impl2], por su parte, decrementará a y b en una unidad antes de hacer lo mismo.
  • Escribir una clase de prueba NUnit que pruebe las dos clases anteriores

6.5. Integración con Spring

  • Escribir un archivo de configuración de Spring que decida qué clases deberá utilizar cada una de las tres capas anteriores
  • Escribir una clase de prueba NUnit que utilice diferentes configuraciones de Spring, con el fin de poner de relieve la flexibilidad de la aplicación escrita
  • Escribir una aplicación autónoma (método main) que pase dos parámetros al método [doSomethingInControlLayer] de la interfaz IControl implementada y muestre el resultado devuelto por la interfaz.