Skip to content

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 та відображає результат, згенерований інтерфейсом.