6. Spring do konfiguracji aplikacji trójwarstwowych
W niniejszym artykule zamierzamy na przykładzie przeanalizować, w jaki sposób Spring może być wykorzystywany do konfiguracji aplikacji trójwarstwowych. Typowym przykładem tego rodzaju aplikacji są aplikacje internetowe.
6.1. Problem
Chcemy zbudować aplikację trójwarstwową o następującej strukturze:
![]() |
- trzy warstwy zostaną oddzielone dzięki zastosowaniu interfejsów
- integracja trzech warstw zostanie zrealizowana przez Spring
- dla każdej z trzech warstw utworzymy oddzielne pakiety o nazwach [control], [domain] i [dao]. Dodatkowy pakiet [tests] będzie zawierał aplikacje testowe.
6.2. Warstwa dostępu do danych
Warstwa DAO będzie implementować następujący interfejs:
Namespace istia.st.spring3tier.dao
Public Interface IDao
' wykonanie jakiejś czynności w warstwie [dao]
Function doSomethingInDaoLayer(ByVal a As Integer, ByVal b As Integer) As Integer
End Interface
End Namespace
- Należy napisać dwie klasy Dao1Impl1 i Dao1Impl2 implementujące interfejs IDao. Metoda Dao1Impl1.doSomethingInDaoLayer zwróci a+b, a metoda Dao1Impl2.doSomethingInDaoLayer zwróci a-b.
- Napisz klasę testową NUnit, która przetestuje dwie poprzednie klasy
6.3. Warstwa biznesowa
Warstwa biznesowa będzie implementować następujący interfejs:
Namespace istia.st.spring3tier.domain
Public Interface IDomain
' wykonanie jakiejś czynności w warstwie [domain]
Function doSomethingInDomainLayer(ByVal a As Integer, ByVal b As Integer) As Integer
End Interface
End Namespace
- Należy napisać dwie klasy Domain1Impl1 i Domain1Impl2 implementujące interfejs IDomain. Klasy te będą miały pole prywatne typu IDao, które będzie można zainicjować za pomocą właściwości publicznej. Metoda doSomethingInDomainLayer klasy [DomainImpl1] zwiększy wartości a i b o jedność, a następnie przekaże te dwa parametry do metody doSomethingInDaoLayer otrzymanego obiektu typu IDao1. Metoda doSomethingInDomainLayer klasy [Domain1Impl2elle] zmniejszy wartości a i b o jedną jednostkę, a następnie wykona tę samą operację.
- napisać klasę testową NUnit sprawdzającą obie poprzednie klasy
6.4. Warstwa interfejsu użytkownika
Warstwa interfejsu użytkownika zaimplementuje następujący interfejs:
Namespace istia.st.spring3tier.control
Public Interface IControl
' wykonać jakąś czynność w warstwie [control]
Function doSomethingInControlLayer(ByVal a As Integer, ByVal b As Integer) As Integer
End Interface
End Namespace
- Należy napisać dwie klasy Control1Impl1 i Control1Impl2 implementujące interfejs IContro1. Klasy te będą miały pole prywatne typu IDomain, które będzie można zainicjować za pomocą właściwości publicznej. Metoda doSomethingInControlLayer klasy [Control1Impl1] zwiększy wartości a i b o jedność, a następnie przekaże te dwa parametry do metody doSomethingInDomainLayer otrzymanego obiektu typu IDomain1. Z kolei metoda doSomethingInControlLayer klasy [Control11Impl2] zmniejszy wartości a i b o jedną jednostkę, a następnie wykona tę samą operację.
- napisać klasę testową NUnit sprawdzającą obie poprzednie klasy
6.5. Integracja ze Springiem
- Napisz plik konfiguracyjny Springa, który określi, z jakich klas będzie korzystać każda z trzech poprzednich warstw
- napisz klasę testową NUnit wykorzystującą różne konfiguracje Springa, aby podkreślić elastyczność napisanej aplikacji
- napisz samodzielną aplikację (metoda main), przekazującą dwa parametry do metody [doSomethingInControlLayer] w zaimplementowanym interfejsie IControl i wyświetlającą wynik zwrócony przez interfejs.
