1

假设您有一个视图,它需要一些需要计算但没有外部依赖的数据。(例如,过去 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”属性会在年末附加一个星号?

免责声明:这仅适用于特定于单个视图并且不会被存储库、视图模型等正确处理的数据。

一方面,在我看来,视图数​​据应该就是这样:一个毫无生气的属性集合,它们只是从控制器传递给视图。另一方面,这更漂亮。

4

2 回答 2

2

就个人而言,我会这样做。我认为该属性还可以。如果您将其视为 VIEW MODEL,那么它就有 VIEW LOGIC 那样的方式,不是吗?它绝对比一堆与标记交织在一起的意大利面条代码要好(我不喜欢这些,尽管有时没有运行)。

该属性是只读的,它用于输出视图特别需要的结果。我的投票是——是的,去吧。

于 2009-10-16T19:57:56.263 回答
0

我认为这是一个非常糟糕的代码。因为视图数据是单视图页面的数据模型。所以,你不应该在这里写一些逻辑。它应该写在控制器类中。

顺便说一句,如果这个视图数据是从很多视图页面调用的,我建议你将初始化源代码移到视图数据类的构造函数中。

更新

请使用以下模式。调用时不要计算值。因为它可能会影响你的表现。此外,它更喜欢方法模式而不是 get-only 属性。

public class SomeViewModel
{
    public SomeViewModel()
    {
        // Initial value of all fields and property
    }

    public IEumerable<string> SomeProperty { get; protected/private set; }
}
于 2009-10-16T19:49:45.333 回答