- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
假设我有一个描述领域模型的领域程序集,它有一个名为产品的类:
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/
我是一名优秀的程序员,十分优秀!