Просто какой-то архитектурный вопрос: я использую ASP.net MVC и исключительно полагаюсь на строго типизированные представления с классами моделей представлений.
Поскольку представление является задачей представления, эти классы содержат не только некоторые поля, но также некоторые функции форматирования, например,
// The ViewModel contains a List<Comment> which the view.aspx iterates
// through, calling this function in a foreach-loop
// PostingDateFormat and DesiredCulture are fields set by the controller,
// and I don't know if they should be
public string GetCommentDateLine(Comment c)
{
return c.CommentDate.ToString(this.PostingDateFormat, this.DesiredCulture);
}
Мне просто интересно, правильно ли это, или я должен перенести это куда-нибудь еще? Это особенно важно для функций, используемых множественными представлениями. Должны ли они жить в особом классе за пределами иерархии? Или быть скопированы / вставлены (yikes) в каждый класс View Model?
Это также учитывая тот факт, что у меня может быть несколько представлений в одной и той же модели представления: обычное представление для браузеров, другое представление для читателей RSS. Естественно, контроллер должен только заполнять модель представления данными, а само представление должно форматировать данные в соответствии с целевым носителем (т.е. даты в каналах RSS форматируются иначе, чем даты на обычных веб-сайтах). У меня должны быть отдельные ViewModel для Нормального и RSS? Или контроллер должен знать, что я хочу поле RSS, и заполнить поле «PostingDateFormat» другим значением? Это кажется лучшим решением (нет необходимости дублировать ViewModels для каждого представления), но я не уверен, что задачей контроллера является узнать, какой DateFormat нужен представлению.