gpt4 book ai didi

asp.net-mvc - MVC 架构 - 重新使用相同的 View 模型进行读取和编辑

转载 作者:行者123 更新时间:2023-12-04 19:16:26 26 4
gpt4 key购买 nike

假设我们有以下(过于简单)的场景:

我们有一个用于查看人员详细信息的屏幕和一个用于编辑人员详细信息的屏幕。

屏幕显示人员详细信息具有以下字段(仅用于显示):



生物

屏幕编辑人员详细信息显示具有以下字段(在输入控件中):

身份证(隐藏)


生物

假设我们的显示 View 模型如下所示:

    public class DisplayPersonViewModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Bio { get; set; }
}

我们的编辑 View 模型如下所示:
public class EditPersonViewModel
{
[Required]
public int ID { get; set; }

[Required]
[StringLength(20)]
public string FirstName { get; set; }

[Required]
[StringLength(20)]
public string LastName { get; set; }

[Required]
public string Bio { get; set; }
}

2个没多大区别吧?编辑模型有一个额外的字段 (ID) 和一些属性上的属性。现在,如果我们像这样组合这两个:
    public class DisplayPersonViewModel
{
[Required]
[StringLength(20)]
public string FirstName { get; set; }

[Required]
[StringLength(20)]
public string LastName { get; set; }

[Required]
public string Bio { get; set; }
}

public class EditPersonViewModel : DisplayPersonViewModel
{
[Required]
public int ID { get; set; }
}

这当然更 DRY,因为我们没有要维护的重复字段,但是现在我们的显示 View 模型上有无关的信息(属性)。无论如何,我更倾向于第二种方法,因为我们的一些屏幕有超过 25 个字段! (...这超出了我的控制范围,所以请不要胡乱说:)...)但是,我只是想听听意见,以便更好地了解什么是“最佳实践”。

最佳答案

是的,第二种方法对我来说似乎很好。除了胃里发痒的感觉告诉你为什么要用验证属性装饰显示 View 模型之外,别担心。但是,如果您可以接受它,与复制 View 模型相比,它确实是首选。

不幸的是,我个人无法忍受这种感觉,这就是我使用 FluentValidation.NET 的原因。定义我的验证规则而不是数据注释。它允许我将这些规则与我的 View 模型分开,然后我不用担心验证规则会污染所谓的显示 View 模型。所以我会以与您相同的方式定义 2 个 View 模型和 EditPersonViewModel将派生自 DisplayPersonViewModel然后定义我的 EditPersonViewModelValidatorEditPersonViewModel在一个单独的类(class)。

哦还有一个旁注:用 [Required] 装饰一个不可为空的类型属性不是必需的。所有不可为空的类型都是其非常基本的性质所必需的。所以而不是:

[Required]
public int ID { get; set; }

你应该只有:
public int ID { get; set; }

关于asp.net-mvc - MVC 架构 - 重新使用相同的 View 模型进行读取和编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8991346/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com