【问题标题】:Automapper concern - what if I remove property from view, but not viewmodel?Automapper 问题 - 如果我从视图中删除属性而不是视图模型怎么办?
【发布时间】:2014-01-06 02:02:52
【问题描述】:

我刚刚开始在 MVC ASP.NET 项目中使用 AutoMapper 将我的域模型映射到我的视图模型。例如。

public class PersonModel
{
    public string FirstName { get; set; }

    public string NickName { get; set; }

    public string LastName { get; set; }

    public DateTime BirthDate { get; set; }
}

public class PersonViewModel
{
    public string FirstName { get; set; }

    public string NickName { get; set; }

    public string LastName { get; set; }

    public DateTime BirthDate { get; set; }
}

// Somewhere...
Mapper.CreateMap<PersonModel, PersonViewModel>();
Mapper.CreateMap<PersonViewModel, PersonModel>();

采用这种模式后,我担心将来会发生以下情况:

1) 开发人员 A 创建人员视图,显示所有 4x 属性的编辑器

2) 开发者 B 稍后从 Person View 中移除“Nickname”编辑器,但留在 PersonViewModel 中

3) 因为昵称值永远不会保留在视图中,因此在保存时提交,Automapper 开始从 PersonViewModel -> PersonModel 映射“昵称”的空值并覆盖数据而没有任何运行时或编译时警告。

这是一个合法的风险吗,您遇到过吗,您是如何处理的?

【问题讨论】:

    标签: model-view-controller viewmodel automapper


    【解决方案1】:

    您可以通过服务器端验证和自动化端到端测试来降低此类风险。

    因此,在您的示例中,其中一项测试是“保存一个人时,昵称应该包含一个值”。

    【讨论】:

    • 问题是如何以一种通用的、全局的方式降低这种风险,而不必为每个字段手动编写代码。如果您必须逐个字段手动对其进行编码,那么使用 Automapper 是没有意义的。
    • 如果没有服务器端验证,服务器端代码如何知道空值是否合法?您提到的场景将发生在任何类型的映射中,手动或自动,因此更多的是拥有一个好的测试套件而不是映射问题。
    • 可能输入了合法的空值......所以空值本身不是问题。问题在于,开发人员只需从视图中删除一个字段即可轻松破坏数据 - 除了 6 个月后的错误报告之外没有任何迹象。
    猜你喜欢
    • 2013-02-28
    • 2020-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2016-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多