Например, между уровнем контроллера и бизнес-логикой в веб-приложениях? Где параметры валидируете? В каких случаях на каких уровнях? Используете ли DTO?
Валидируем по формату/типам/диапазонам на уровне контроллера. Затем если надо уже более сложные проверки в бизнес логике. Вместо дто обычно сами модели юзаем
а если необходимо произвести некоторое действие с какой-то сущностью из БД, при этом id этой сущности приходит с запросом, этот id прокидываете дальше в слой бизнеса?
Дтохи использую для создания и обновления объектов А также фильтры всякие между уровнем логики и данных В качестве валидации используются valueobject Это в лучше случае так делать, но по собственному опыту - не советую Лучше пиши валидаторы с использованием средств фреймворка, они точно в Джанго есть, а ещё есть пайдентик Вот пайдентик вообще топ тема для валидации данных и повышения качества кода
Ну ты можешь объект попробовать прокидывать, но, кажется, это очень заморочено, постоянно вытаскивать его Лучше просто айдишник прокидывать Тем более, не исключены ситуации, когда айдишник есть, как внешний ключ, а самого значения нету
а не создаст ли это проблемы, что дизайн уровня бизнеса ориентируется на контракт взаимодействия с клиентом по http какому-нибудь?
Не совсем понял Что за контракт взаимодействия?
Я в MVC не очень шарю Но, как я понимаю, логика в контроллере это норм
вот задача у тебя сделать апишку пополнения кошелька для какого-то аккаунта апишка принимает id кошелька и сумму S я тут вижу 2 варианта: 1) сделать метод службы WalletService.make_payin(wallet_id: int, s: Decimal) - и прокидывать туда айдишник кошелька и сумму - тут ты как бы дизайнишь исходя из контракта твоего api 2) сделать метод службы WalletService.make_payin(wallet: Wallet, s: Decimal) - тут ты уже прокидываешь сам кошелек, уже органичней смотрится, но нужно кошелек где-то в контроллере достать предварительно, что как бы должны быть на уровне бизнес-логики или тут уже вкусовщина?
Да, первый вариант лучше
так почему же?
Я приведу мега тупой аргумент: Дзен питона гласит, что "простое лучше сложного" )))
простота в сигнатуре? 🙂
Я понял, на что ты намекаешь Мол, а вдруг в памяти оно где то хранится, а мы его обновляем в другом месте и получается, что у нас в другом месте он остался Я хз, как с этим бороться, проще не бороться Если Джанго используешь, то там стопудов есть решение этой проблемы А свои велосипеды не к чему писаит
Да неважно в чем Можно сделать проще и понятней, значит сделай так, говорят они)))
джангу не использую давно нет, на проблемы согласованности не намекал, просто с точки зрения дизайна интересно было услышать мнения спасибо
А что используешь вместо неё?
либо flask, либо fastapi опенапи везде алхимия + алембик
Обсуждают сегодня