ASP.NET MVC:我的观点应该是多么愚蠢?

时间:2010-01-06 11:30:42

标签: .net asp.net-mvc

好的,我不是在谈论做出业务逻辑决策,而是在做出UI决策。

例如,我正在渲染一个表,一列显示DateTime?需要格式化的属性。因为该值可以为空,所以我需要在格式化之前检查它是否为空。

如果我想要迂腐,我的ViewModel上会有一个FormattedDate属性:

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 个答案:

答案 0 :(得分:4)

如果直接将它放在视图中,它并没有真正保存任何相关代码行 - 它只是移动它。

但是,如果将它放在View中,则只能在那里使用它。您无法在其他地方重用ViewModel的逻辑,也无法对其进行单元测试。

让你的观点真的很愚蠢。我会说视图应该尽可能低Cyclomatic Complexity

有关详细信息,请参阅this answer

答案 1 :(得分:1)

如果你做了很多事情,也许你可以为Nullable<DateTime>写一个扩展方法,如下所示:

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

保持ViewModel或View的混乱。