6. Spring per la configurazione di applicazioni a tre livelli
Qui useremo un esempio per esplorare come Spring può essere utilizzato per configurare applicazioni a tre livelli. Un esempio comune di questo tipo di applicazione sono le applicazioni web.
6.1. Il problema
Vogliamo creare un'applicazione a tre livelli con la seguente struttura:
![]() |
- I tre livelli saranno resi indipendenti tramite l'uso di interfacce
- L'integrazione dei tre livelli sarà gestita da Spring
- Creeremo pacchetti separati per ciascuno dei tre livelli, che chiameremo [control], [domain] e [dao]. Un pacchetto aggiuntivo [tests] conterrà le applicazioni di test.
6.2. Il livello di accesso ai dati
Il livello DAO implementerà la seguente interfaccia:
Namespace istia.st.spring3tier.dao
Public Interface IDao
' do something in the diaper [dao]
Function doSomethingInDaoLayer(ByVal a As Integer, ByVal b As Integer) As Integer
End Interface
End Namespace
- Scrivi due classi, Dao1Impl1 e Dao1Impl2, che implementino l'interfaccia IDao. Il metodo Dao1Impl1.doSomethingInDaoLayer restituirà a+b, mentre il metodo Dao1Impl2.doSomethingInDaoLayer restituirà a-b.
- Scrivi una classe di test NUnit per testare le due classi precedenti
6.3. Il livello business
Il livello di business implementerà la seguente interfaccia:
Namespace istia.st.spring3tier.domain
Public Interface IDomain
' do something in the [domain] layer
Function doSomethingInDomainLayer(ByVal a As Integer, ByVal b As Integer) As Integer
End Interface
End Namespace
- Scrivi due classi, Domain1Impl1 e Domain1Impl2, che implementino l'interfaccia IDomain. Queste classi avranno un campo privato di tipo IDao che può essere inizializzato tramite una proprietà pubblica. Il metodo doSomethingInDomainLayer della classe [DomainImpl1] incrementerà a e b di uno, quindi passerà questi due parametri al metodo doSomethingInDaoLayer dell'oggetto IDao1 ricevuto. Il metodo doSomethingInDomainLayer della classe [Domain1Impl2] decrementerà a e b di uno prima di eseguire la stessa operazione.
- Scrivere una classe di test NUnit per testare le due classi precedenti
6.4. Il livello dell'interfaccia utente
Il livello dell'interfaccia utente implementerà la seguente interfaccia:
Namespace istia.st.spring3tier.control
Public Interface IControl
' do something in the [control] layer
Function doSomethingInControlLayer(ByVal a As Integer, ByVal b As Integer) As Integer
End Interface
End Namespace
- Scrivi due classi, Control1Impl1 e Control1Impl2, che implementino l'interfaccia IControl1. Queste classi avranno un campo privato di tipo IDomain che può essere inizializzato tramite una proprietà pubblica. Il metodo doSomethingInControlLayer della classe [Control1Impl1] incrementerà a e b di uno, quindi passerà questi due parametri al metodo doSomethingInDomainLayer dell'oggetto IDomain1 ricevuto. Il metodo doSomethingInControlLayer della classe [Control1Impl2], invece, decrementerà a e b di uno prima di eseguire la stessa operazione.
- Scrivere una classe di test NUnit per testare le due classi precedenti
6.5. Integrazione con Spring
- Scrivi un file di configurazione Spring che determini quali classi debba utilizzare ciascuno dei tre livelli precedenti
- Scrivi una classe di test NUnit utilizzando diverse configurazioni Spring per evidenziare la flessibilità dell'applicazione
- Scrivi un'applicazione autonoma (metodo main) che passi due parametri al metodo [doSomethingInControlLayer] dell'interfaccia IControl implementata e visualizzi il risultato restituito dall'interfaccia.
