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.
