ASP.NET MVC: насколько глупым должен быть мой взгляд? - PullRequest
4 голосов
/ 06 января 2010

Хорошо, я говорю не о принятии решений по бизнес-логике, а о решениях для пользовательского интерфейса.

Например, я рендеринг таблицы, и в одном столбце отображается DateTime? свойство, которое необходимо отформатировать. Поскольку значение может иметь значение NULL, я должен проверить, что оно не равно NULL перед форматированием.

Если бы я хотел быть педантичным, у меня было бы свойство FormattedDate в моей ViewModel:

public class MyViewModel 
{
    ...
    public DateTime? Date { get; set; }

    public string FormattedDate 
    {
        get 
        {
            return this.Date.HasValue ? this.Date.Value.ToShortDateString() : "";
        }
    }
}

<%= Html.Encode(Model.FormattedDate) %>

Или я мог бы сэкономить несколько строк кода и просто дать ему пощечину:

<%= Html.Encode(Model.Date.HasValue ? Model.Date.Value.ToShortDateString() : "")%> 

В этом случае, поскольку это то, что влияет только на представление, я бы сказал, что это нормально делать вторым способом (а также это более компактно), но где я могу провести черту между загромождением моего вида сервером и со своей моделью ViewModel загромождены свойствами «форматирования»?

Ответы [ 2 ]

4 голосов
/ 06 января 2010

Это на самом деле не спасет вас ни одной строки соответствующего кода, если вы поместите его непосредственно в представление - оно просто перемещает его.

Однако, если вы поместите его в представление, вы можете использовать его только там. Вы не можете повторно использовать логику ViewModel в другом месте и не можете выполнить ее модульное тестирование.

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

См. этот ответ для более подробной информации.

1 голос
/ 06 января 2010

Если вы много чего делаете, возможно, вы могли бы написать метод расширения для Nullable<DateTime>, например, так:

static public string Format(this DateTime? value)
{
    return value.HasValue ? value.ToShortDateString() : string.Empty;
}

Сохраняет беспорядок в вашей ViewModel или View.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...