RK
DB Constraints, field types - это integrity check. Это часть "Data Layer / Storage". Ты гарантируешь что данные типизированы (в широком смыслe). Этим занимается база данных или любой другой Data Source.
Data Access Layer - это Repository Pattern. Здесь ты вытаскиваешь данные из Data Layer в BLL через контракт (behaviour).
Business Logic Layer - здесь бизнес логика. Ей похер где лежат данные. У нее есть котракт с DAL. Я могу выкинуть Ecto и поставить хоть гравицапу. Главное чтобы behaviour был имплементирован.
Где-то на верхушке BLL - Validation Layer - он проверяет все то, что не проверишь на integrity check или не засунешь туда. В несложных случаях integrity check'а хватает.
И завершает все Delivery Layer. Это контроллеры или GraphQL схема. Тут ты тупо тыкаешь DAL.
---
Я работаю в мед-секторе и мы пишем адски конфигурируемый софт. Уровень меты порой зашкаливает. AR реально начинает превращаться в фарш, 5-этажные
where
разбросаны по всему проекту и дублируются т к более 50 инженеров над этим всем работают.И еще, с AR ты перемешиваешь DAL и BLL ибо у тебя
where
прямо внутри логики и так принято.