либо переизобретением чего-то уже существующего
Он здесь предлагает делать отдельный класс, который будет инкапсулировать логику для получения коллекций объектов и отдельный класс для работы с одним объектом.
Почему-то в дефолтной реализации класса, который отражает один объект, сам этот класс занимается тем, что ходит в базу, чтобы достать кажный из атрибутов. Естественно, так никто делать не будет, и будут использовать закешированную версию, где класс принимает все свои атрибуты.
А чем это отличается от моделей в орм? Может, он воюет с ActiveRecord, но гибернейт вроде не из таких, и его примеры не содержат ActiveRecord. Хотя я могу тут ошибаться.
Класс, отвечающий за таблицу, на самом деле просто аналог репозитория.
ORM реализуют за тебя две важные фичи.
1) QueryBuilder
Поскольку SQL очень плохо расширяем, и вообще, плохо задизайнен, то билдер запросов позволяет выносить общие части запроса в отдельные функции, давая большую гибкость при написании кода, и сокращая количество кода.
Здесь же предлагается писать запрос в виде строки, а для сложных случаев, изобретать свой квери билдер, как часто бывает в приложениях, использующих только сырые запросы.
2) Отображение реляционной модели данных на объекты.
В коде ты не работаешь с таблицами, поэтому тебе нужны объекты.
Что тут предлагается? Мапить все руками. А это куча однотипного кода, в котором легко допустить ошибку.
В итоге, как мне кажется, что он хочет избавиться от того, чтобы приложение напрямую взаимодействовало с базой через ORM, но этого можно достичь и через репозитории. Тот, способ, который он предлагает создает кучу других проблем, решение которых выльиться в переизобретение ормов
О, я кажется читал это на Хабре
Обсуждают сегодня