Skip to content

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.