Независимость доменного слоя
В своей книге "Чистая Архитектура" Роберт Мартин пишет, что бизнес-логика не должна зависеть от базы данных. Иными словами доменный слой должен быть независим от слоя базы данных.
Но как это реализовать в классическом Spring Boot приложении с модулем Spring Data?
Обычно в Spring Data создается интерфейс репозитория под каждую сущность. И поскольку это лишь интерфейс, реализации он не содержит, а значит, теоретически может быть отнесен к доменному слою.
На практике он содержит наследования и аннотации, относящиеся к слою базы данных, а значит и сам привязан к базе данных. Более того, если мы захотим сменить базу данных или вовсе избавиться от неё, заменив, например, файловой системой, то этот интерфейс должен быть изменен, а это противоречит принципу открытости/закрытости.
Аналогичная ситуация происходит с сущностями, для которых создаются репозитории, и которые используются в бизнес логике.
Конечно можно использовать принцип инверсии зависимостей, но кажется это приведет к многочисленному дублированию кода на разных слоях.
Как бы не пытался разрешить эту ситуацию - не удается. Стоит ли настолько детально чистить архитектуру? И как добиться чистоты в условиях Spring Data?
· 31.01
Хотите чтстоты? Тогда не используйте Spring Data, пишите свою реализацию. А Data была создана в первую очередь для удобства разработчиков что бы базовые методы не нужно было реализовывать и уж о принципах Мартина они думали в последнюю очередь.
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён
· 31.01
Это наверно одна из первых идей, которая пришла, столкнувшись с данной проблемой)
Были мысли перейти к чистому Hibernate или вовсе к JDBC. Но кажется это может создать больше неудобств, чем недостатки архитектуры Spring. Хотя может я ошибаюсь.
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответ удалён