Pull to refresh

Comments 3

Спасибо за полное погружение

Вопрос, есть какой-нибудь реальный кейс, когда нужно прибегнуть к самостоятельному написанию дескриптора?

Зачастую они уже все реализованы и лезть под капот не нужно. Или у нас уже есть для этого более явная концепция в виде геттеров и сеттеров, или декораторов, которые позволяют реализовать то же самое. Декораторы - не явное поведение, а дескрипторы ещё менее явное.

Синтетические примеры напоминают ментальную разминку.

Здравствуйте, спасибо за комментарий

Реальный кейс 1
Я работал на проекте, где все провайдеры (репозитории, интеракторы, юзкейсы, контроллеры) являются синглтонами, из-за этого у меня не было возможности во время запроса пользователя записывать какие-либо данные в экземпляр провайдера.

Я добавил дескриптор, который при присваивании записывает данные в ContextVar контекста запроса, а при запросе атрибута, возвращает их от туда же.

Реальный кейс 2

У меня на проекте есть Entity на основе Pydantic, которые я заполняю данными из django QuerySet.

Помимо этого написана логика, на то, чтобы в метод репозитория при вызове можно было передать DTO, который нужно вернуть вместо Entity.

Так как в Entity есть дополнительные вычисляемые свойства и их терять не хочется, сначала QuerySet конвертируется в Entity, а потом в DTO.

Так же в запросе может участвовать не только одна таблица базы данных, мне нужно, чтобы значения соответствующих полей с O2O, M2O и M2M связями также для начала конвертировались в соответствующих им Entity.

Для этого был написан дескриптор для вложенных Entity (NestedEntity), который использует в объемлющих Entity.

Реальный кейс 3

Описан в текущей статье в разделе про вложенные дескрипторы

Понял+-, спасибо, ещё раз перечитаю чтоб уложилось

Sign up to leave a comment.

Articles