6. Spring zur Konfiguration von dreischichtigen Anwendungen
Wir möchten hier 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 3-Tier-Anwendung mit folgender Struktur erstellen:
![]() |
- Die drei Schichten werden durch die Verwendung von Schnittstellen voneinander unabhängig gemacht
- Die Integration der drei Schichten erfolgt durch Spring
- Für jede der drei Schichten werden separate Pakete erstellt, die [control], [domain] und [dao] heißen. Ein zusätzliches Paket [tests] enthält die Testanwendungen.
6.2. Die Datenzugriffsebene
Die Schicht DAO implementiert die folgende Schnittstelle:
Namespace istia.st.spring3tier.dao
Public Interface IDao
' etwas in der Schicht tun [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 Schnittstelle IDao implementieren. Die Methode Dao1Impl1.doSomethingInDaoLayer gibt a+b zurück, und die Methode Dao1Impl2.doSomethingInDaoLayer gibt a-b zurück.
- Schreiben Sie eine Testklasse NUnit, die die beiden vorherigen Klassen testet
6.3. Die Geschäftslogik-Schicht
Die Geschäftsschicht implementiert die folgende Schnittstelle:
Namespace istia.st.spring3tier.domain
Public Interface IDomain
' etwas in der Schicht tun [domain]
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 Schnittstelle IDomain 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 anschließend an die Methode doSomethingInDaoLayer des empfangenen Objekts vom Typ IDao1. Die Methode doSomethingInDomainLayer der Klasse [Domain1Impl2elle] verringert a und b um eine Einheit, bevor sie dasselbe tut.
- Schreiben Sie eine Testklasse NUnit, die die beiden vorherigen Klassen testet
6.4. Die Benutzeroberflächenschicht
Die Benutzeroberflächenschicht implementiert die folgende Schnittstelle:
Namespace istia.st.spring3tier.control
Public Interface IControl
' etwas in der Ebene tun [control]
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 IContro1 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 anschließend an die Methode doSomethingInDomainLayer des empfangenen Objekts vom Typ IDomain1. Die Methode doSomethingInControlLayer der Klasse [Control11Impl2] hingegen verringert a und b um eine Einheit, bevor sie dasselbe tut.
- Schreiben Sie eine Testklasse NUnit, die die beiden vorherigen Klassen testet
6.5. Integration mit Spring
- Schreiben Sie eine Spring-Konfigurationsdatei, die festlegt, welche Klassen jede der drei vorangegangenen Schichten verwenden soll
- Schreiben Sie eine Testklasse NUnit, die verschiedene Spring-Konfigurationen verwendet, um die Flexibilität der geschriebenen Anwendung hervorzuheben
- Schreiben Sie eine eigenständige Anwendung (Methode „main“), die der Methode [doSomethingInControlLayer] der implementierten Schnittstelle IControl zwei Parameter übergibt und das von der Schnittstelle gerenderte Ergebnis anzeigt.
