Только вчера написал про фокус на предметной области, как сегодня прилетел вопрос в телеграм. DDD в Django — это норм? Надо мне меньше писать про Django )). На самом деле не норм. Для Django лучше всего подходят архитектурные парадигмы, которые учитывают его встроенные возможности.
Дело в том, что фреймворк — это не только некий уровень абстракции над чем-то. Но и навязывание какой-либо архитектуры. Даже если мы этой архитектуры и не наблюдаем.
И так…
Django
Если мы говорим про архитектуру, то Django — это MTV (Model-Template-View). MTV, в свою очередь, это разновидность MVC. И первая, и вторая аббревиатура однозначно имеет право на жизнь. Потому что это одна из немногих парадигм, которая позволяет просто «встать и побежать». Простота и быстрое прототипирование, плюс всё “из коробки”.
Она подходит для любых проектов: от маленьких сайтов до реально крупномасштабных проектов. Про крупномасштабные не шучу — есть масса примеров, которые на слуху.
DDD не очень хорошо ложится на всё это. Потому что однозначно виден конфликт с ORM. Но если мы говорим про архитектуру, то на Django неплохо ложится Service Layer. Потому что позволяет разделить логику. И для проектов выше среднего это неплохо.
# примерно так
def create_order(user, data):
order = Order.objects.create(user=user, **data)
return order
FastAPI
Из названия понятно, что речь про REST Full API плюс SPA. Однозначно неплохо — чёткое разделение фронта и бэка, плюс неплохая масштабируемость. Но есть одна проблема. Не особо много людей могут ее проектировать. И DDD тоже не очень ложится на GRUD.
AIOHTTP
Трудно назвать это фреймворком, скорее библиотека. Но благодаря своему минимализму позволяет с легкостью и чистую архитектуру (Clean Architecture). Это когда всё разделено на слои (use cases
, интерфейсы
, инфраструктура
). И DDD.
Но, друзья, не забываем о минусах: много кода и забудьте про «быстрый старт». Можно использовать в проектах любых масштабов, но особо хорошо заходит в крупные.