Где лучшее место для форматирования свойств модели в ASP.NET MVC(3)?

В последнее время я много смотрю на лучшие практики в рамках ASP.NET MVC, в частности, на разделение задач. Мой вопрос заключается в том, что если у меня есть свойство в модели, где лучше всего сделать форматирование этого свойства?

Я обдумал несколько вариантов, но не уверен, какой из них лучше. В примере используется DateTime. Извините, что получилось немного длинно.

Вариант 1: В представлении: @Model.TheDate.String("{0:'blah'dd/MM/yyyy}") Я знаю, что это неправильно, потому что строка формата не должна быть здесь (что, если я хочу изменить формат во всем приложении)

Вариант 2: Метод расширения, используемый в представлении: @Model.TheDate.DisplayItNicePlease() Это вроде как имеет смысл, потому что представление выбирает метод расширения, который будет использоваться для форматирования, а модель представления просто раскрывает свойство даты для представления. Однако не совсем понятно, кто должен отвечать за форматирование - представление или модель представления.

Вариант 3: В методе Html Helper, т.е. что-то вроде Where should I place Declarative HTML helpers in ASP.NET MVC 3, чтобы вы могли использовать:

@Html.DisplayDateNice(Model.TheDate)

Вариант 4: Дополнительное свойство модели представления, чтобы отформатировать ее и вернуть строку, например:

public string TheDateStr
{
    get
    {
        return TheDate.DisplayItNicePlease();
    }
}

А затем в представлении вы просто имеете

@Model.TheDateStr

Довольно похоже на вариант 3, только это сохраняет представление очень, очень простым - представление буквально просто выводит то, что находится в модели, и не заботится о формате данных.

Вариант 5: Атрибуты DisplayFormat, например:

[DisplayFormat(DataFormatString = "{0:'blah'dd/MM/yyyy}")]
public DateTime TheDate { get; set; }

На модели представления:

[DisplayFormat(DataFormatString = "{0:'blah'dd/MM/yyyy}")]
public DateTime TheDate { get; set; }

И затем на представлении:

@Html.DisplayFor(m => m.TheDate)

Мне это нравится, кроме того, что строка формата не используется повторно, так что продолжайте вариант 5...

Вариант 6: DisplayFormatAttribute, например, NiceDateDisplayFormatAttribute. Мне кажется, что это самое приятное решение, и оно хорошо работает, если вам нужно простое форматирование строки. Я думаю, что все усложняется, если вам нужно что-то более сложное, например, отображение относительного времени (Calculate relative time in C#), в этом случае, возможно, это лучше сделать в методе расширения/html helper.

Возможно, есть и другие способы, о которых я даже не знаю...

14
задан Community 23 May 2017 в 11:58
поделиться