【问题标题】:Simple getter logic in ViewModelsViewModel 中的简单 getter 逻辑
【发布时间】:2017-04-03 11:08:24
【问题描述】:

是否可以在 ViewModels getter 中使用简单的逻辑(没有任何依赖关系),或者它应该只包含自动属性?在这种情况下,只需检查 null,因此每次使用此 ViewModel 时我都不必在控制器中执行此操作。 TicketSearchParameters 是一个包含字符串和日期属性的简单模型,没有 Repository 或任何其他依赖项。

public class MyViewModel
{
    private TicketSearchParameters _searchParams;
    public TicketSearchParameters SearchParams
    {
        get
        {
            if (_searchParams == null)
            {
                _searchParams = new TicketSearchParameters();
                _searchParams.CreatedFrom = DateTime.Now.AddDays(-7);
                _searchParams.CreatedTo = DateTime.Now;
            }
            return _searchParams;
        }
        set
        {
            _searchParams = value;
        }
    }

    /*** other properties ***/

}

【问题讨论】:

  • 如果你想设置默认值,这就是构造函数的用途 - public MyViewModel(){ SearchParams = new TicketSearchParameters(){ CreatedFrom = DateTime.Now.AddDays(-7), CreatedTo = DateTime.Now }; }
  • @StephenMuecke 那么问题来了,可以在 ViewModel 构造函数中使用这种逻辑吗?
  • 是的,当然。
  • @StephenMuecke 谢谢,我问的是因为有人说模型根本不应该有任何逻辑,所有逻辑都应该在控制器中处理。你可以写一个与这一切相关的答案,我会接受的。
  • 这里没有对错之分。这三个都可以工作,但是默认构造函数的目的是初始化模型中的默认值(如果你没有其他的,编译器无论如何都会创建一个)。这意味着保持它干燥(假设你总是想要那些默认值,每次你想初始化你的模型时不要在控制器中重复该代码)

标签: asp.net-mvc viewmodel asp.net-mvc-viewmodel


【解决方案1】:

你的代码还不错。但是你可以使用NULL Object Design Pattern来检查null并创建NullObject。

创建一个继承自 SearchParams 的名为 NullSearchParams 的类,并在需要时对其进行初始化。

您可以在此处查看 Null 设计模式文档。

https://sourcemaking.com/design_patterns/null_object

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    • 1970-01-01
    • 2018-04-10
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多