Хотелось бы услышать ваше мнение по этому поводу.
У меня есть приложение django, где данные, полученные из модели, являются грубыми. Чтобы сделать их лучше, я должен выполнить потенциально сложную, но не слишком сложную операцию.
Например, предположим, у вас есть модель, в которой штат США кодируется в виде двухбуквенных кодов. В html-рендеринге вы хотите предоставить пользователю полное имя состояния. У меня есть переписка из двух букв -> полное имя в другой таблице БД. Давайте предположим, что я не хочу выполнять объединения.
У меня есть два варианта
- заставить код представления извлечь двухбуквенную информацию из модели, затем выполнить запрос ко второй таблице, получить полное имя и поместить его в контекст. Шаблон отображает полное имя состояния.
- создать пользовательский фильтр, который принимает двухбуквенные коды, нажимает на БД и возвращает полное имя. Пусть представление передаст двухбуквенную информацию в контекст и вставит шаблон в трубопровод. Фильтр отображает двухбуквенный код в виде полной строки.
Теперь, эти решения кажутся эквивалентными, но они не могут быть, также с точки зрения дизайна. Я скептически отношусь к тому, где провести грань между ответственностью фильтра и ответственностью просмотра. Решение 1 выполняет задачу фильтра в решении 2, он просто интегрирован в само представление. Конечно, если мне придется вызывать фильтр несколько раз на одной и той же странице, решение 1, вероятно, будет быстрее (если выходные данные фильтра не запомнены).
Что вы думаете о дизайне, правильном кодировании и производительности?