#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 это или нет.