gpt4 book ai didi

c# - 通过单独的程序集充分利用 ASP.NET MVC DataAnnotations

转载 作者:太空狗 更新时间:2023-10-30 01:09:37 24 4
gpt4 key购买 nike

假设我有一个描述领域模型的领域程序集,它有一个名为产品的类:

public class Product
{
public int Id { get; set; }
public string Name { get; set; }
}

我还有另一个程序集,它是使用此域模型运行的 Web 应用程序。现在我想创建一个表单来创建新产品并对属性进行一些验证。最简单的方法是在类上使用 DataAnnotations。然而,这会导致域模型现在包含有关表单验证的元数据,这不是一个非常明确的关注点分离。

类可以有 MetadataType 属性,但我认为这并没有什么好处。突然之间,您的域模型类依赖于表单验证元数据类。

另一种方法是创建一个CreateProductForm 类并在其中添加所需的属性,并在类之间进行映射。然而,这会产生一些开销,因为您需要单独维护这些类,并且其中一个的更改可能会破坏另一个。在某些情况下可能需要这样做,但在其他一些情况下,它可能只会产生额外的工作(例如,假设您有一个地址类)。

更新:有些人建议我为此使用 AutoMapper,我已经知道这一点。 AutoMapper 只是使映射更简单、更容易,并没有真正解决必须维护两个几乎相同的独立类的问题。我的偏好是仅在有明显需求时才创建表单类。

有没有一种方法可以直接在 Web 程序集中声明注解,而不会为域程序集创建不必要的依赖项?

最佳答案

如果您不想在域模型和 View 之间引入耦合,您应该采用 CreateProductForm 类的方式。

根据您的项目规模/要求,您迟早必须将 View 模型与域分开。假设您正在使用 DisplayName 属性:您要标记您的域实体吗?

使用像 AutoMapper 这样的工具可以大大简化映射过程。

关于c# - 通过单独的程序集充分利用 ASP.NET MVC DataAnnotations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6342142/

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