С этим согласен
nkostya 07.12.2022 09:47
Я от ORM жду больше чем Query Builder.
Если всегда работать только с table|hash, то в какой-то момент времени начнут возникать вопросы с тем как в понять что это за данные в переменной.
В идеале мы хотим работать с "понятиями" (доменная модель) конкретной области и не вдаваться в технические детали.
Я определяю для себя работу с приложением на нескольких "уровнях".
Где мы начинаем с "доменной модели" и дальше спускаемся по "технической необходимости".
Примерно так:
- Уровень модели (Пользователь, Новость, Заказ и т.п.)
Отвечает за бизнес-логику.
Позволяет работать с Объектом на уровне "бизнеса".
Данные Модели, Взаимосвязи с другими Моделями. Опреации/Действия над Моделью. Условия/Ограничения и т.п. Все это на уровне описания "от бизнеса".
- Уровень данных
Отвечает за техническое представление данных в коде. Это и есть ActiveRecord.
Позволяет работать с данными на "техническом" уровне.
- Уровень хранения
Отвечает за получение/хранение данных из "хранилища". Обычно это называют Репозиторием.
В нем отдельно можно выделить уровень "хранилища". Т.к. единый интерфейс работы с данными может использовать разные способы хранения данных.
Это могут быть СУБД или файл, hashfile или еще что-то.
При это Репозиторий может работать с несколькими Хранилищами, тем самым даже организуя прозначный шардинг данных в СУБД. Или вообще получение данных по API.
* * *
Ограничиваясь работой только на уровне table|hash мы вынуждены будем дублировать код. Или же создавать какие-то классы, которые отвечают за "Модель".
А это и есть упомянутый мною слой "Уровень модели".
А наличие в framework такой заготовки уже задает определенный подход к работе.
И это проще в дальнейшем поддерживать и обслуживать.
* * *
Вопрос оптимизации, накладных расходов - он есть всегда.
В зависимости от задачи (требований) и язык программирования нужно выбирать и уровень физической инфраструктуры и даже аппаратную составляющую.
Правда, идеологически мы все также будем стремиться работать "на уровне бизнеса" для решения высокоуровневых задач. И минимизировать трудозатраты на "технические детали".