В попередній статті ми розібрались з паттерном Специфікація та тим як його можно використовувати. Сьогодні ми поговоримо про логічне продовження в покращенні нашого коду. Паттерн репозиторій.
Визначення
Почнемо з визначення. Репозиторій - це паттер проектування який розділяє рівні доступу до данних з рівнем бізнес-логіки.
Розділення
Подивимось на шматочок коду з якогось проекту.
![](https://cdn.drukarnia.com.ua/643b021a1272bd9066a24112/images/articles/6447e9ae38cd2dd0b1cf9858/r8W435729.70999481306.jpeg)
В цьому прикладі ми бачимо як в одній функції ми одночасно робимо валідацію і зберігаємо в базу данний нового користувача. З точки зору архітектури, це поганий приклад. Правильно було би винести валідацію в окрему функцію. А функцію взаємодії з базою в окрему. Це виглядало би так
![](https://cdn.drukarnia.com.ua/643b021a1272bd9066a24112/images/articles/6447e9ae38cd2dd0b1cf9858/8Apg595320.974231705.jpeg)
Цей код краще через можливість перевикористовувати функцію валідації та зберігання. Це базовий приклад розділення бізнес логіки і роботи з данними
Репозиторій
Паттерн репозиторій це один зі способів роботи з данними в окремо від бізнес логіки. Наведу просту реалізацію репозиторія
![](https://cdn.drukarnia.com.ua/643b021a1272bd9066a24112/images/articles/6447e9ae38cd2dd0b1cf9858/DNKo230058.70470132917.jpeg)
На цьому прикладі показана реалізація репозиторія для масива. В простому пояснені репозиторій це масив обєктів і набір функцій які можно робити з цим масивом. І взаємодіяти з цим масивом можно тільки через репозиторій. Що унеможливлює зовнішне втручання і вплив на внутрішній механізм репозиторія. А також дозволяє відділити DataLayer від бізнес-логіки.
В прикладі вище ви могли бачити використання специфікацій. Одна особливість що для репозиторія з масивом треба використовувати стандартну реалізацію Специфікації. Її реалізацію на TS ви можете знайти ось тут. Причиною використання специфікації є бажання зробити цей рівень максимально незалежним від зовнішніх втручань. Тобто умови пошуку по масиву ми передаємо зовні. При тому можемо кобінувати ці специфікації.
Репозиторій для взаємодії з базою
Репозиторій можно використовувати для роботи з базою. Я покажу
![](https://cdn.drukarnia.com.ua/643b021a1272bd9066a24112/images/articles/6447e9ae38cd2dd0b1cf9858/q5mS777930.0158723674.jpeg)
Тут ми вже бачимо використання реалізацію патерна специфікації яку я показував в минулій статті. Такий репозиторій можно використовувати для розмежування шару данних від бізнес логіки. Плюс легко перевикористовувати.
Висновки
Паттерн репозиторій дозволяє розділити управління данними від бізнес логіки. А також покращити перевикористання коду. Ще одним плюсом є те що ви можете замінити базу данних прям посеред проекту. І для цього потрібно буде змінити набагато менше. А весь інший код навіть не буде знати що шось змінилось він просто буде отримувати ті самі обєкти. Я особисто вважаю що базу посеред проекту ніхто в здоровому глузді не міняє, але хто знає. Може вам знадобиться.
Всім дякую за увагу, з вас оплески і коментарі. З мене більше про архітектуру в JS