Является ли использование тегов шаблонов для извлечения данных нарушением разделения задач?

#django #separation-of-concerns

#django #разделение задач

Вопрос:

Мне интересно, является ли приложение django generic flatblocks нарушением принципа разделения интересов.
Для тех из вас, кто не знаком с приложением, оно извлекает данные на основе slug или id и типа модели.
Например:

 {% gblock "about" for "cms.FlatPageWithsummary" into "about" %}
  

С одной стороны, он отмечает, где должно отображаться содержимое, поэтому это имеет смысл с точки зрения дизайнера, но с другой стороны, это не должно быть обязанностью шаблона для извлечения данных.
Что мне делать? Должен ли я передавать это через контекст запроса?
Теперь я сталкиваюсь с другой ситуацией, когда мне нужно извлекать мои последние сообщения и отображать их.

Где здесь грань?
Потому что, опять же, дизайнер может пометить и реализовать эту функцию только с помощью предоставленного мной тега шаблона, но, с другой стороны, я извлекаю данные из шаблона, который кажется немного неправильным.

Ответ №1:

Что, если это так? Эти «принципы» предназначены для того, чтобы облегчить нашу жизнь как разработчиков, так и пользователей. Если самый простой и понятный способ сделать что-либо нарушает этот принцип, мы должны смело поступать так, пока качество кода не страдает. Не похоже, что есть моральная причина соблюдать разделение задач любой ценой.

И, не забывайте, есть и другие принципы, которым следует следовать. Принимая во внимание, что это нарушает разделение задач, оно все равно наиболее определенно следует DRY . Если эти принципы противоречат друг другу, вы должны выбрать, какому из них следовать.

Комментарии:

1. Есть другие способы решить проблему DRY, если я не буду использовать теги шаблонов. Вопрос в том, кто несет ответственность за извлечение данных? Представление или шаблон?

Ответ №2:

django.contrib.comments слишком извлекает данные из базы данных в templatetag. Если вы хотите сделать свои приложения повторно используемыми, то это распространенный шаблон.

Комментарии:

1. С новыми представлениями на основе классов легко предоставить mixin, который добавляет записи в переменную extra_context. Однако вы не ответили на мой вопрос. Является ли это нарушением SoC?

2. я так не думаю. Это способ упростить работу

3. Даже если это упрощает задачу, это все равно не является веским аргументом за или против того, нарушает SoC это или нет.