Я працюю в архітектурі, вона пропонує пропонувати api для відпочинку для веб-клієнтів та мобільних додатків. Я використовую Spring (spring mvc, spring data jpa, ... тощо). Модель домену кодується зі специфікацією JPA.
Я намагаюся застосувати деякі концепції чистої архітектури ( https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html ). Не все, тому що я буду тримати модель домену jpa.
Фактичний потік через шари такий:
Передній <--> Служба API -> Сервіс -> Репозиторій -> БД
- Передня частина : веб-клієнт, мобільні додатки
- Служба API : Решта контролерів, тут я використовую перетворювачі, послуги dto та call
- Сервіс : Інтерфейси з реалізаціями і містять бізнес-логіку
- Репозиторій : інтерфейси сховища з автоматичними реалізаціями (виконані весняними даними jpa), які містять CRUD-операції та, можливо, деякі запити sql
Мої сумніви: чи варто використовувати додатковий шар між службою та сховищем?
Я планую цей новий потік:
Передній <--> Служба API -> Сервіс -> Постійність -> Репозиторій -> БД
Навіщо використовувати цей шар стійкості? Як сказано в статті про чисту архітектуру, я хотів би мати службову реалізацію (бізнес-логіку або випадок використання), що має доступ до рівня стійкості агностику. І ніякі зміни не знадобляться, якщо я вирішу використовувати інший шаблон «доступу до даних», наприклад, якщо я вирішу припинити використання сховища.
class ProductServiceImpl implements ProductService {
ProductRepository productRepository;
void save(Product product) {
// do business logic
productRepository.save(product)
}
}
Тому я думаю використовувати шар стійкості на зразок цього:
class ProductServiceImpl implements ProductService {
ProductPersistence productPersistence;
void save(Product product) {
// do business logic
productPersistence.save(product)
}
}
та реалізація такого шару стійкості:
class ProductPersistenceImpl implements ProductPersistence {
ProductRepository productRepository;
void save(Product product) {
productRepository.save(product)
}
}
Тому мені потрібно лише змінити реалізацію шару стійкості, залишивши сервіс без змін. Сумівся з тим, що Репозиторій пов'язаний з рамкою.
Як ти гадаєш? Дякую.