6. Spring для налаштування трирівневих додатків
Тут ми розглянемо на прикладі, як Spring можна використовувати для конфігурації трирівневих додатків. Типовим прикладом такого типу додатків є веб-додатки.
6.1. Задача
Ми хочемо створити трирівневий додаток із такою структурою:
![]() |
- три рівні будуть незалежними завдяки використанню інтерфейсів
- інтеграція трьох рівнів буде здійснена за допомогою Spring
- для кожного з трьох рівнів будуть створені окремі пакети, які отримають назви [control], [domain] та [dao]. Додатковий пакет [tests] міститиме тестові додатки.
6.2. Рівень доступу до даних
Рівень DAO реалізує наступний інтерфейс:
Namespace istia.st.spring3tier.dao
Public Interface IDao
' виконати якусь дію в шарі [dao]
Function doSomethingInDaoLayer(ByVal a As Integer, ByVal b As Integer) As Integer
End Interface
End Namespace
- Написати два класи Dao1Impl1 та Dao1Impl2, що реалізують інтерфейс IDao. Метод Dao1Impl1.doSomethingInDaoLayer поверне a+b, а метод Dao1Impl2.doSomethingInDaoLayer поверне a-b.
- Напишіть тестовий клас NUnit, який перевіряє обидва попередні класи
6.3. Бізнес-шар
Бізнес-шар реалізує наступний інтерфейс:
Namespace istia.st.spring3tier.domain
Public Interface IDomain
' виконати якусь дію в шарі [domain]
Function doSomethingInDomainLayer(ByVal a As Integer, ByVal b As Integer) As Integer
End Interface
End Namespace
- Написати два класи Domain1Impl1 та Domain1Impl2, що реалізують інтерфейс IDomain. Ці класи матимуть приватне поле типу IDao, яке можна буде ініціалізувати за допомогою публічної властивості. Метод doSomethingInDomainLayer класу [DomainImpl1] збільшить значення a та b на одиницю, а потім передасть ці два параметри методу doSomethingInDaoLayer отриманого об’єкта типу IDao1. Метод doSomethingInDomainLayer класу [Domain1Impl2elle] зменшить значення a та b на одиницю, перш ніж виконати те саме.
- Написати тестовий клас NUnit для тестування двох попередніх класів
6.4. Рівень користувацького інтерфейсу
Рівень користувацького інтерфейсу реалізує наступний інтерфейс:
Namespace istia.st.spring3tier.control
Public Interface IControl
' зробити щось у шарі [control]
Function doSomethingInControlLayer(ByVal a As Integer, ByVal b As Integer) As Integer
End Interface
End Namespace
- Написати два класи Control1Impl1 та Control1Impl2, що реалізують інтерфейс IContro1. Ці класи матимуть приватне поле типу IDomain, яке можна буде ініціалізувати за допомогою публічної властивості. Метод doSomethingInControlLayer класу [Control1Impl1] збільшить значення a та b на одиницю, а потім передасть ці два параметри методу doSomethingInDomainLayer отриманого об’єкта типу IDomain1. Метод doSomethingInControlLayer класу [Control11Impl2], у свою чергу, зменшить значення a та b на одиницю, перш ніж виконати те саме.
- Написати тестовий клас NUnit для тестування двох попередніх класів
6.5. Інтеграція зі Spring
- Напишіть файл конфігурації Spring, який визначатиме, які класи повинен використовувати кожен із трьох попередніх рівнів
- Написати тестовий клас NUnit, що використовує різні конфігурації Spring, щоб продемонструвати гнучкість написаного додатка
- Написати автономний додаток (метод main), який передає два параметри методу [doSomethingInControlLayer] реалізованого інтерфейсу IControl та відображає результат, згенерований інтерфейсом.
