Skip to content

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.