parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

С этим согласен

nkostya 07.12.2022 09:47

Я от ORM жду больше чем Query Builder.

Если всегда работать только с table|hash, то в какой-то момент времени начнут возникать вопросы с тем как в понять что это за данные в переменной.

В идеале мы хотим работать с "понятиями" (доменная модель) конкретной области и не вдаваться в технические детали.

Я определяю для себя работу с приложением на нескольких "уровнях".
Где мы начинаем с "доменной модели" и дальше спускаемся по "технической необходимости".

Примерно так:

- Уровень модели (Пользователь, Новость, Заказ и т.п.)
Отвечает за бизнес-логику.
Позволяет работать с Объектом на уровне "бизнеса".
Данные Модели, Взаимосвязи с другими Моделями. Опреации/Действия над Моделью. Условия/Ограничения и т.п. Все это на уровне описания "от бизнеса".

- Уровень данных
Отвечает за техническое представление данных в коде. Это и есть ActiveRecord.
Позволяет работать с данными на "техническом" уровне.

- Уровень хранения
Отвечает за получение/хранение данных из "хранилища". Обычно это называют Репозиторием.

В нем отдельно можно выделить уровень "хранилища". Т.к. единый интерфейс работы с данными может использовать разные способы хранения данных.
Это могут быть СУБД или файл, hashfile или еще что-то.

При это Репозиторий может работать с несколькими Хранилищами, тем самым даже организуя прозначный шардинг данных в СУБД. Или вообще получение данных по API.

* * *

Ограничиваясь работой только на уровне table|hash мы вынуждены будем дублировать код. Или же создавать какие-то классы, которые отвечают за "Модель".
А это и есть упомянутый мною слой "Уровень модели".

А наличие в framework такой заготовки уже задает определенный подход к работе.
И это проще в дальнейшем поддерживать и обслуживать.

* * *

Вопрос оптимизации, накладных расходов - он есть всегда.
В зависимости от задачи (требований) и язык программирования нужно выбирать и уровень физической инфраструктуры и даже аппаратную составляющую.

Правда, идеологически мы все также будем стремиться работать "на уровне бизнеса" для решения высокоуровневых задач. И минимизировать трудозатраты на "технические детали".