Архитектура и Python

Только вчера написал про фокус на предметной области, как сегодня прилетел вопрос в телеграм. 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.

Но, друзья, не забываем о минусах: много кода и забудьте про «быстрый старт». Можно использовать в проектах любых масштабов, но особо хорошо заходит в крупные.