好的,我不是在谈论做出业务逻辑决策,而是在做出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与“格式化”属性混杂在一起吗?
答案 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的混乱。