Как стать автором
Обновить

Комментарии 4

Вообще не понял зачем смешивать репозиторий и UoW. Совершенно перпендикулярные паттерны.

Причём здесь репозитории и UoW? Кстати о generic репозиториях - why the generic repository is just a lazy anti pattern

В статье код как-будто бы из алхимии < 1.4, уже на 1.4 session.query считалось устаревшим, а с 2.0 это уже deprecated подход(конструкцию не удалили, но внутри она теперь работает так же как sqlalchemy.select)

Когда увидел заголовок статьи, подумал что наконец-то увижу как люди пишут свой UoW для core алхимии, но оказалось что опять собрали все репозитории в одном место и добавили .commit и .rollback. Имхо, если нужен такой интерфейс, то хотя бы репозитории надо из него удалить, нет же проблем прокинуть одну и ту же сессию в разные репозитории.

Мне кажется, вы искажаете смысл этих паттернов, описывая нечто другое...

Вы описываете UnitOfWork, как объект, который отслеживает изменения выгружаемых сущностей. При этом выбрали для примера SQLAlchemy, в которой эта логика инкапсулирована внутри session. Получается, вы не показали, как работает паттерн, а показали пример делегирования.

Потом перешли к описанию паттерна Repository. Он инкапсулирует работу с базой данных. Но его цель - сделать доменную модель независимой от метода хранения данных. А в вашем случае это просто интерфейс. При этом вы возвращаете через него объекты моделей SQLAlchemy...

Эта статья действительно из разряда "Unit Of Work, который мы заслужили" : )

Что, кстати, делать, если нужны запросы, выходящие за пределы CRUD? Расширять базовый репозиторий методами? И в примерах - нет последовательности, те же BookRepository, UserRepository и RentalRepository - уже не являются наследниками базового репозитория, тогда зачем он вообще был введен?

В общем - искания автора поддерживаю; представленная реализация - далека от адекватности.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий