Skip to content

6. Spring zur Konfiguration von dreischichtigen Anwendungen

Hier werden wir anhand eines Beispiels untersuchen, wie Spring zur Konfiguration von dreischichtigen Anwendungen eingesetzt werden kann. Ein gängiges Beispiel für diese Art von Anwendungen sind Webanwendungen.

6.1. Das Problem

Wir möchten eine dreischichtige Anwendung mit folgender Struktur erstellen:

  • Die drei Schichten werden durch die Verwendung von Schnittstellen voneinander unabhängig gemacht
  • Die Integration der drei Schichten wird von Spring übernommen
  • Wir werden für jede der drei Schichten separate Pakete erstellen, die wir [control], [domain] und [dao] nennen werden. Ein zusätzliches [tests]-Paket wird die Testanwendungen enthalten.

6.2. Die Datenzugriffsebene

Die DAO-Schicht wird die folgende Schnittstelle implementieren:

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
  • Schreiben Sie zwei Klassen, Dao1Impl1 und Dao1Impl2, die die IDao-Schnittstelle implementieren. Die Methode Dao1Impl1.doSomethingInDaoLayer gibt a+b zurück, und die Methode Dao1Impl2.doSomethingInDaoLayer gibt a-b zurück.
  • Schreiben Sie eine NUnit-Testklasse, um die beiden vorherigen Klassen zu testen

6.3. Die Geschäftsschicht

Die Geschäftsschicht implementiert die folgende Schnittstelle:

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
  • Schreiben Sie zwei Klassen, Domain1Impl1 und Domain1Impl2, die die IDomain-Schnittstelle implementieren. Diese Klassen verfügen über ein privates Feld vom Typ IDao, das über eine öffentliche Eigenschaft initialisiert werden kann. Die Methode doSomethingInDomainLayer der Klasse [DomainImpl1] erhöht a und b um eins und übergibt diese beiden Parameter dann an die Methode doSomethingInDaoLayer des empfangenen IDao1-Objekts. Die Methode doSomethingInDomainLayer der Klasse [Domain1Impl2] verringert a und b um eins, bevor sie dasselbe tut.
  • Schreiben Sie eine NUnit-Testklasse, um die beiden vorherigen Klassen zu testen

6.4. Die Benutzeroberflächenschicht

Die Benutzeroberflächenschicht implementiert die folgende Schnittstelle:

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
  • Schreiben Sie zwei Klassen, Control1Impl1 und Control1Impl2, die die Schnittstelle IControl1 implementieren. Diese Klassen verfügen über ein privates Feld vom Typ IDomain, das über eine öffentliche Eigenschaft initialisiert werden kann. Die Methode doSomethingInControlLayer der Klasse [Control1Impl1] erhöht a und b um eins und übergibt diese beiden Parameter dann an die Methode doSomethingInDomainLayer des empfangenen IDomain1-Objekts. Die Methode doSomethingInControlLayer der Klasse [Control1Impl2] hingegen verringert a und b um eins, bevor sie dasselbe tut.
  • Schreiben Sie eine NUnit-Testklasse, um die beiden vorherigen Klassen zu testen

6.5. Integration mit Spring

  • Schreiben Sie eine Spring-Konfigurationsdatei, die festlegt, welche Klassen jede der drei vorherigen Schichten verwenden soll
  • Schreiben Sie eine NUnit-Testklasse unter Verwendung verschiedener Spring-Konfigurationen, um die Flexibilität der Anwendung hervorzuheben
  • Schreiben Sie eine eigenständige Anwendung (main-Methode), die zwei Parameter an die Methode [doSomethingInControlLayer] der implementierten IControl-Schnittstelle übergibt und das von der Schnittstelle zurückgegebene Ergebnis anzeigt.