передают? (sqlalchemy)
С фронта получаю словаря с большим набором данных, которые я постепенно добавляю с бд, но если не проходит ЛЮБОЙ из проверок, то все предыдущие операции должны отменится.
Вижу два решения:
1) Создать сессию для пользователя и как раз передать ее в качестве аргумента фукнций, и при нахождение ошибок завершить сессию не сохранив
Минусы:
Мне придется передать сначала сессию в класс который управляет определенной таблицей, который передаст его в класс репозитория. (В принципе не сильный минус, но код будет не красивым :( )
Доменная область будет зависеть от сесси из sqlalchemy (тут уже похуже)
Плюсы:
Решает проблему, ну и сессий для каждого действия не создается. Сейчас функции выглядит примерно так:
session = Session()
session.add(item)
session.commit()
session.close()
2) Вынести проверки в отдельные класса,
тут у меня будет два раза проверятся данные, ведь убирать из нынешних классов проверку нельзя, она должа быть обязательной
Может идеи по лучше есть?
1. Ну вообще хз что такое "класс управлящий таблицей". Доменна область не знает ничего от таблицах. Одна сущность доменной области может храниться в нескольких таблицах 2. доменной области надо знать о транзакциях 3. мне нравится инициализировать репоизторий с передачей ему готовой сессии, это можно сделать в сервисном слое
класс управлящий таблицей - ну класс хранилища, у него должен быть опередлененный набор методов class ProtocolCustomerDirectoryStorage(Protocol): def add_contractor(self, contractor: Contractor) -> CustomerDirectoryStorageResult: pass def get_first_by_TIN(self, TIN: TIN) -> CustomerDirectoryStorageResult: pass def get_by_id(self, id: CustomerID) -> CustomerDirectoryStorageResult: pass def update_customer(self, customer: Customer) -> CustomerDirectoryStorageResult: pass def delete_customer(self, id: CustomerID) -> CustomerDirectoryStorageResult: pass 3 - спасибо, звучит отлично и ничего не ломает
ну это не класс работающей с таблицей, это класс работающий с Customer. А вот будет кастомер в одной таблице лежать или в нескольких - детали реализации
Обсуждают сегодня