【问题标题】:asp.net mvc viewmodels and fetching data in model classasp.net mvc viewmodels 和在模型类中获取数据
【发布时间】:2012-01-11 13:36:54
【问题描述】:

我对在视图模型中获取数据有疑问。

例如我有视图模型:

public class EmployeeCreateVM
{
    public Employee Employee { get; set; }
    public List<EmployeeState> EmployeeStates { get; set; } // dropdownlist data
    public List<EmployeeType> EmployeeTypes { get; set; } // dropdownlist data

    public EmployeeCreateVM()
    {
        EmployeeStates = ...
        EmployeeType = ...
    }
}

我的问题是关于设计视图模型,特别是获取数据。 例如,对于我当前的项目,我正在从控制器获取数据:

[Get]
EmployeeCreateVM model = new EmployeeCreateVM();
model.EmployeeStates = _repository....

[Post] - again
model.EmployeeStates = _repository....

直接从视图模型类获取数据是不好的做法吗?

谢谢

【问题讨论】:

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


    【解决方案1】:

    是的,因为它违反了关注点分离。如果您以后需要更改数据访问方法,它将不再位于单个位置(控制器)中,而是位于使用该存储库的每个视图模型中。

    这里有更多的讨论: What to put in your ViewModel

    【讨论】:

    • 感谢您提供有趣的链接。在我的应用程序中,我使用 DI,所以如果我更改数据访问方法,我只需编写其他实现我的存储库类并将其设置在 di configi
    • @Mennion 即便如此,您也不应该在构造函数中包含它;视图模型(以及所有类)应该做一件事。想象一下,您只想将某些 EmployeeTypes 返回到您的控制器/视图,这将需要您编辑您的 EmployeeCreateVM 类,这感觉不对。
    • @Wal - 是的,在 vm 类中获取数据对我来说是不自然的。但我喜欢 DRY 原则,在 get 和 post 操作中获取 vm 不是 DRY...
    • @Mennion 您在获取和发布操作中重复了什么?我建议将重复的代码移动到EmployeeViewModelRepositoryService 类或类似的类中。
    • @Mennion 我同意。我通常使用类似的服务模型来缓存相应的下拉列表数据,这样当我需要在 POST 模型无效的情况下重新扩展视图模型时,我什至不必访问存储库。
    猜你喜欢
    • 2011-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    • 2020-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多