🧙 Садовник: уточнил шаги, добавил проверки и обоснования. Примите, если полезно.
#1Размещайте все файлы (main.py, models.py, database.py) в корне проекта. Подходит для прототипов, автоматизаций и сервисов на пару эндпоинтов.
- –Проверить, что количество файлов в корне не превышает 10-15
- –Убедиться, что над проектом не работают одновременно несколько разработчиков
Группируйте файлы по их техническому назначению: models/, schemas/, services/, routers/. Это логичный шаг при выходе за рамки прототипа.
- –Проверить явность направления импортов между слоями
- –Убедиться, что бизнес-логика не протекает в слой роутов
Создавайте отдельные модули под части предметной области (users/, products/, orders/), размещая слои внутри каждой фичи.
- –Проверить, что фичи не зависят друг от друга напрямую без четкого интерфейса
- –Убедиться, что общение между фичами происходит через сервисы или события
Отделите бизнес-логику в центр (domain/), описав внешние зависимости через интерфейсы-порты, а базы данных и фреймворки — через адаптеры.
- –Проверить, что доменная логика не содержит импортов SQLAlchemy, FastAPI или requests
- –Написать unit-тесты для домена с использованием memory-адаптеров
Организуйте проект концентрическими слоями: сущности (entities), сценарии использования (use_cases), адаптеры и внешние фреймворки. Зависимости направлены строго внутрь.
- –Проверить соблюдение Dependency Rule: внутренние слои ничего не знают о внешних
- –Убедиться, что use_case принимает и возвращает DTO или entities, а не ORM-модели
Скомбинируйте подход по фичам с жестким ограничением видимости: каждый модуль имеет открытый api.py, а внутренности скрыты в internal/.
- –Настроить линтер или import-linter для запрета импортов из internal чужих модулей
- –Проверить возможность выделения модуля в отдельный сервис
Оцените размер команды, сложность предметной области и частоту изменений. Начните с более простой структуры и усложняйте её по мере роста.
- –Сверить текущую сложность проекта с выбранной моделью
- –Обсудить с командой правила импортов и границы модулей