Skip to content

6. Spring para configurar aplicações de três camadas

Propomos aqui estudar, por meio de um exemplo, como o Spring pode ser utilizado para configurar aplicativos de três camadas. Um exemplo comum desse tipo de aplicativo são os aplicativos web.

6.1. O problema

Deseja-se construir uma aplicação de três camadas com a seguinte estrutura:

  • as três camadas serão tornadas independentes por meio do uso de interfaces
  • a integração das três camadas será realizada pelo Spring
  • serão criados pacotes separados para cada uma das três camadas, que serão denominados [control], [domain] e [dao]. Um pacote adicional, [tests], conterá as aplicações de teste.

6.2. A camada de acesso aos dados

A camada DAO implementará a seguinte interface:

Namespace istia.st.spring3tier.dao
    Public Interface IDao
         ' fazer algo na camada [dao]
        Function doSomethingInDaoLayer(ByVal a As Integer, ByVal b As Integer) As Integer
    End Interface
End Namespace
  • Escreva duas classes, Dao1Impl1 e Dao1Impl2, que implementem a interface IDao. O método Dao1Impl1.doSomethingInDaoLayer retornará a+b, e o método Dao1Impl2.doSomethingInDaoLayer retornará a-b.
  • Escreva uma classe de teste NUnit para testar as duas classes anteriores

6.3. A camada de negócios

A camada de negócios implementará a seguinte interface:

Namespace istia.st.spring3tier.domain
    Public Interface IDomain
         ' fazer algo na camada [domain]
        Function doSomethingInDomainLayer(ByVal a As Integer, ByVal b As Integer) As Integer
    End Interface
End Namespace
  • Escreva duas classes, Domain1Impl1 e Domain1Impl2, que implementem a interface IDomain. Essas classes terão um campo privado do tipo IDao, que poderá ser inicializado por meio de uma propriedade pública. O método doSomethingInDomainLayer da classe [DomainImpl1] incrementará a e b em uma unidade e, em seguida, passará esses dois parâmetros para o método doSomethingInDaoLayer do objeto do tipo IDao1 recebido. O método doSomethingInDomainLayer da classe [Domain1Impl2elle] diminuirá a e b em uma unidade antes de fazer o mesmo.
  • Escreva uma classe de teste NUnit para testar as duas classes anteriores

6.4. A camada de interface do usuário

A camada de interface do usuário implementará a seguinte interface:

Namespace istia.st.spring3tier.control
    Public Interface IControl
         ' fazer algo na camada [control]
        Function doSomethingInControlLayer(ByVal a As Integer, ByVal b As Integer) As Integer
    End Interface
End Namespace
  • Escreva duas classes, Control1Impl1 e Control1Impl2, que implementem a interface IContro1. Essas classes terão um campo privado do tipo IDomain, que poderá ser inicializado por meio de uma propriedade pública. O método doSomethingInControlLayer da classe [Control1Impl1] incrementará a e b em uma unidade e, em seguida, passará esses dois parâmetros para o método doSomethingInDomainLayer do objeto do tipo IDomain1 recebido. Já o método doSomethingInControlLayer da classe [Control11Impl2] diminuirá a e b em uma unidade antes de fazer o mesmo.
  • Escrever uma classe de teste NUnit para testar as duas classes anteriores

6.5. Integração com o Spring

  • Escreva um arquivo de configuração do Spring que determinará quais classes cada uma das três camadas anteriores deverá utilizar
  • Escreva uma classe de teste NUnit utilizando diferentes configurações do Spring, a fim de destacar a flexibilidade da aplicação desenvolvida
  • Escreva um aplicativo autônomo (método main) que passe dois parâmetros para o método [doSomethingInControlLayer] da interface IControl implementada e exiba o resultado gerado pela interface.