假设你有一个视图需要一些数据需要一些计算,但没有外部依赖。 (例如,过去5年的可枚举字符串列表。)将它放在强类型视图类中是否可以接受?
这样的事情:
class HomeIndexViewData
{
// ...some view data...
public IEnumerable<String> LastThreeYears
{
get
{
return new string[] {
DateTime.Now.Year.ToString(),
(DateTime.Now.Year - 1).ToString(),
(DateTime.Now.Year - 2).ToString() };
}
}
}
现在,如果该计算依赖于视图数据类中的某些其他属性,该怎么办?假设如果年份出现在日期列表中,那么“LastThreeYears”属性会在年末添加星号吗?
免责声明:这仅适用于特定于单个视图的数据,并且无法由存储库,视图模型等正确处理。
一方面,在我看来,视图数据应该只是:一个毫无生气的属性集合,它们只是从控制器传递给视图。另一方面,这是非常漂亮的。
答案 0 :(得分:2)
就个人而言,我会这样做。我认为财产还可以。如果你认为它是一个VIEW MODEL,那么它有这样的VIEW LOGIC,不是吗?它肯定比用标记交织的意大利面条代码块更好(我不喜欢这些,但有时候没有运行)。
该属性是只读的,用于输出视图特别需要的结果。我的投票是 - 是的,去吧。
答案 1 :(得分:0)
我认为这是一个非常糟糕的代码。因为视图数据是单视图页面的数据模型。所以,你不应该在这里写一些逻辑。它应该写在控制器类中。
顺便说一下,如果从很多视图页面调用这个视图数据,我建议你将源代码初始化为视图数据类的构造函数。
<强>更新强>
请使用以下模式。调用时不要计算值。因为它可能会影响您的表现。而且,它比get-only属性更喜欢方法模式。
public class SomeViewModel
{
public SomeViewModel()
{
// Initial value of all fields and property
}
public IEumerable<string> SomeProperty { get; protected/private set; }
}