6. Spring per configurare le applicazioni a tre livelli
In questa sede intendiamo esaminare, attraverso un esempio, come Spring possa essere utilizzato per configurare le applicazioni a tre livelli. Un esempio comune di questo tipo di applicazioni sono le applicazioni web.
6.1. Il problema
Si desidera realizzare un’applicazione a tre livelli con la seguente struttura:
![]() |
- i tre livelli saranno resi indipendenti grazie all’utilizzo di interfacce
- l’integrazione dei tre livelli sarà realizzata da Spring
- verranno creati pacchetti separati per ciascuno dei tre livelli, denominati [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
' fare qualcosa nel livello [dao]
Function doSomethingInDaoLayer(ByVal a As Integer, ByVal b As Integer) As Integer
End Interface
End Namespace
- Scrivere 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.
- Scrivere una classe di test NUnit che verifichi le due classi precedenti
6.3. Il livello business
Il livello business implementerà la seguente interfaccia:
Namespace istia.st.spring3tier.domain
Public Interface IDomain
' fare qualcosa nel livello [domain]
Function doSomethingInDomainLayer(ByVal a As Integer, ByVal b As Integer) As Integer
End Interface
End Namespace
- Scrivere due classi Domain1Impl1 e Domain1Impl2 che implementino l'interfaccia IDomain. Queste classi avranno un campo privato di tipo IDao che potrà essere inizializzato tramite una proprietà pubblica. Il metodo doSomethingInDomainLayer della classe [DomainImpl1] incrementerà a e b di un'unità, quindi passerà questi due parametri al metodo doSomethingInDaoLayer dell'oggetto di tipo IDao1 ricevuto. Il metodo doSomethingInDomainLayer della classe [Domain1Impl2elle] decrementerà a e b di un'unità prima di eseguire la stessa operazione.
- Scrivere una classe di test NUnit che verifichi 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
' fare qualcosa nel livello [control]
Function doSomethingInControlLayer(ByVal a As Integer, ByVal b As Integer) As Integer
End Interface
End Namespace
- Scrivere due classi Control1Impl1 e Control1Impl2 che implementino l'interfaccia IContro1. Queste classi avranno un campo privato di tipo IDomain che potrà essere inizializzato tramite una proprietà pubblica. Il metodo doSomethingInControlLayer della classe [Control1Impl1] incrementerà a e b di un'unità, quindi passerà questi due parametri al metodo doSomethingInDomainLayer dell'oggetto di tipo IDomain1 ricevuto. Il metodo doSomethingInControlLayer della classe [Control11Impl2], invece, decrementerà a e b di un'unità prima di eseguire la stessa operazione.
- Scrivere una classe di test NUnit che verifichi le due classi precedenti
6.5. Integrazione con Spring
- Scrivere un file di configurazione Spring che deciderà quali classi dovrà utilizzare ciascuno dei tre livelli precedenti
- Scrivere una classe di test NUnit che utilizzi diverse configurazioni Spring, al fine di evidenziare la flessibilità dell'applicazione scritta
- Scrivere un'applicazione autonoma (metodo main) che passi due parametri al metodo [doSomethingInControlLayer] dell'interfaccia IControl implementata e visualizzi il risultato restituito dall'interfaccia.
