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.
