Помощники преобразования числа/даты в MVC, где их использовать?

Stackoverflow построен на MVC и делает кучу простых, но приятных вещей с датами и числами (подсчет ответов, голосов и т. д.). Я предполагаю, что все это делается с помощью пары статических вспомогательных классов.

Мой вопрос: должно ли представление вызывать эти вспомогательные объекты или контроллер должен вызывать эти вспомогательные объекты и вставлять результат в ViewData?

  1. Контроллер заполняет данные представления

    • Controller Loads Model/Data
    • Контроллер использует статический метод DateHelper для преобразования даты в удобную строку
    • Дружественная строка даты предоставляется для просмотра через ViewData
  2. Контроллер заполняет данные представления моделью, а представление вызывает DateHelper

    • Controller Loads Model/Data
    • Контроллер предоставляет модель для просмотра через ViewData
    • Когда ViewData привязывается к HTML, он вызывает статический метод DateHelper.

Я подозреваю, что номер 1 - правильный путь, но он кажется немного запутанным, поскольку вы можете взять список моделей, и их легко перебрать в представлении. Если вы обрабатываете и генерируете кучу понятных строк на основе набора экземпляров модели, а в модели нет места для их прикрепления к конкретному экземпляру, вы в конечном итоге отправляете два разных списка данных в ViewData. Правильно?

Ваши мысли оценены.


person Eric Schoonover    schedule 04.11.2008    source источник


Ответы (3)


В зависимости от того, кого вы спросите, вы получите разные ответы. Мне лично нравится вариант № 2, так как я хочу, чтобы ViewData были необработанными данными, и выбираю, как они отображаются в представлении. Для меня совершенно нормально делать это в представлении, поскольку это касается представления.

Однако я знаю людей в моей собственной команде, которые не согласны со мной, предполагая, что контроллер возвращает модель представления, а не просто модель (я также согласен с этим), и он должен обрабатывать все эти преобразования перед отправкой модели в представление. Вид в этом случае должен быть супер тупой.

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

person Haacked    schedule 04.11.2008

Я думаю, что я бы предпочел использовать помощника в представлении. На мой взгляд, то, как отображается дата, зависит от представления. Контроллер просто знает, что представление должно его отображать.

person Rob    schedule 04.11.2008

Я полностью за вариант 2. Я бы сказал, что это проблема форматирования, о которой, на мой взгляд, нужно беспокоиться.

person Jeff Sheldon    schedule 04.11.2008