В попередній статті ми розібрались з паттерном Специфікація та тим як його можно використовувати. Сьогодні ми поговоримо про логічне продовження в покращенні нашого коду. Паттерн репозиторій.
Визначення
Почнемо з визначення. Репозиторій - це паттер проектування який розділяє рівні доступу до данних з рівнем бізнес-логіки.
Розділення
Подивимось на шматочок коду з якогось проекту.
В цьому прикладі ми бачимо як в одній функції ми одночасно робимо валідацію і зберігаємо в базу данний нового користувача. З точки зору архітектури, це поганий приклад. Правильно було би винести валідацію в окрему функцію. А функцію взаємодії з базою в окрему. Це виглядало би так
Цей код краще через можливість перевикористовувати функцію валідації та зберігання. Це базовий приклад розділення бізнес логіки і роботи з данними
Репозиторій
Паттерн репозиторій це один зі способів роботи з данними в окремо від бізнес логіки. Наведу просту реалізацію репозиторія
На цьому прикладі показана реалізація репозиторія для масива. В простому пояснені репозиторій це масив обєктів і набір функцій які можно робити з цим масивом. І взаємодіяти з цим масивом можно тільки через репозиторій. Що унеможливлює зовнішне втручання і вплив на внутрішній механізм репозиторія. А також дозволяє відділити DataLayer від бізнес-логіки.
В прикладі вище ви могли бачити використання специфікацій. Одна особливість що для репозиторія з масивом треба використовувати стандартну реалізацію Специфікації. Її реалізацію на TS ви можете знайти ось тут. Причиною використання специфікації є бажання зробити цей рівень максимально незалежним від зовнішніх втручань. Тобто умови пошуку по масиву ми передаємо зовні. При тому можемо кобінувати ці специфікації.
Репозиторій для взаємодії з базою
Репозиторій можно використовувати для роботи з базою. Я покажу
Тут ми вже бачимо використання реалізацію патерна специфікації яку я показував в минулій статті. Такий репозиторій можно використовувати для розмежування шару данних від бізнес логіки. Плюс легко перевикористовувати.
Висновки
Паттерн репозиторій дозволяє розділити управління данними від бізнес логіки. А також покращити перевикористання коду. Ще одним плюсом є те що ви можете замінити базу данних прям посеред проекту. І для цього потрібно буде змінити набагато менше. А весь інший код навіть не буде знати що шось змінилось він просто буде отримувати ті самі обєкти. Я особисто вважаю що базу посеред проекту ніхто в здоровому глузді не міняє, але хто знає. Може вам знадобиться.
Всім дякую за увагу, з вас оплески і коментарі. З мене більше про архітектуру в JS