Skip to content

Не смешивать бизнес-логику и отображение (Jinja2) #4

Description

@glorden

Проблема

По мере развития веб-интерфейса возникает соблазн переносить бизнес-логику в HTML-шаблоны или, наоборот, формировать HTML внутри Python-кода.

Это приводит к тому, что код становится сложнее читать, тестировать и поддерживать.

Цель

Четко разделять ответственность между компонентами приложения:

  • роуты принимают HTTP-запросы и подготавливают данные;
  • сервисы реализуют бизнес-логику;
  • шаблоны Jinja2 только отображают уже готовые данные.

Шаблоны могут содержать простые условия и циклы, необходимые для отображения интерфейса, но не должны принимать бизнес-решения.

Примеры

Допустимо:

  • показать или скрыть кнопку;
  • вывести сообщение в зависимости от статуса;
  • пройтись циклом по списку элементов.

Недопустимо:

  • вычислять, кому должен перейти заказ;
  • изменять состояние очереди;
  • выполнять запросы к базе данных;
  • реализовывать сложные бизнес-правила.

Примечание

Простые конструкции if и for в шаблонах являются нормальной практикой.

Ишью направлена не на полный отказ от логики в Jinja2, а на предотвращение появления бизнес-логики в слое представления.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions