После трех лет разработки Django я узнал следующее.
ORM - это уровень доступа. Больше ничего не нужно.
50% бизнес-логики идет в модели. Часть этого повторяется или усиливается в формах.
20% бизнес-логики уходит в формы. Все данные проверяются, например, в формах. В некоторых случаях формы сужают общую область (разрешенную в модели) до некоторого подмножества, специфичного для проблемы, бизнеса или отрасли.
20% бизнес-логики попадает в другие модули приложения. Эти модули находятся над моделями и формами, но под функциями просмотра, веб-службами RESTful и приложениями командной строки.
10% бизнес-логики завершается в приложениях командной строки, использующих интерфейс команд управления. Это загрузка файлов, извлечения и случайные массовые изменения.
Очень важно, чтобы функции просмотра и веб-службы RESTful ничего не делали. Они максимально используют модели, формы и другие модули. Функции представления и веб-службы RESTful ограничены работой с капризами HTTP и различными форматами данных (JSON, HTML, XML, YAML и т. Д.)
Попытка изобрести еще один уровень доступа - упражнение с нулевым значением.