ODMA
Организация кода
Локальность следует за ownership
Реализация возможности и её тесты находятся у владельца. Не выносим функцию только потому, что технически можно создать ещё один файл. Повторное использование не оправдывает автоматический перенос поведения в utils.
Vue-компонент стоит разделить, если он превышает примерно 300 строк, объединяет независимые обязанности или содержит поведение с естественным доменным владельцем. Доменная логика переходит в этот домен, а не в безымянный общий composable.
domains/business/catalog/
models.ts
api/
ui/
tests/
Это пример выражения ответственности, а не обязательный шаблон папок. На backend модели, сериализаторы, views, admin и CMS-плагины могут находиться в одном домене. При рефакторинге сохраняем явные Django app labels, идентичность данных и публичные экспорты.