Идея для наслоения системы: изоляция . Один слой не зависит от другого.
Сколько существует различных баз данных? Postgresql, MySql, MongoDB, Cassandra ... Уровень персистентности (или Уровень доступа к данным ) предоставит интерфейс для вашей системы. Допустим, вашей системе нужно найти пользователя по его идентификатору.
public interface UserRepository {
User findByID (Long id);
}
Реализация будет меняться для каждой базы данных, но действительно ли это имеет значение для приложения, ее потребляющего? Нет , пока контракт, предоставленный интерфейсом, не нарушен.
Как только вы получите данные, бизнес-логика будет определять, что и как вы будете делатьс этим. С точки зрения MVC, бизнес-логика также определяет область транзакции (подробнее: Почему мы не должны делать контроллер Spring MVC @Transactional? ). Допустим, у вас есть пользователь, которого вы получили с помощью предыдущего интерфейса. Но вам нужно вернуть дополнительные атрибуты, например, его зарплату. Но нет никакого атрибута зарплаты на POJO пользователя. А также, чтобы рассчитать зарплату, вашей системе необходимо вызвать внешнюю систему. Ваша бизнес-логика позаботится об этом, а затем вернет сжатый объект (известный как Data Transfer Obejct) вызывающей стороне.
Некоторые ресурсы:
https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html