C# 没有MVC依赖关系的模型上的MVC数据注释?

C# 没有MVC依赖关系的模型上的MVC数据注释?,c#,asp.net-mvc,class,C#,Asp.net Mvc,Class,假设我有一个包含所有模型类的项目,另一个项目包含一个MVC4 web应用程序(服务层、存储库层) 如果我想为我的模型属性使用特定于MVC的数据注释,如何在不依赖于MVC的情况下做到这一点 任何引用模型的非MVC项目也需要MVC引用。我更希望这些只在MVC使用模型时添加,而不是全部 最初我考虑的是分部类,但我知道它们不能用于交叉组装 在模型类之外创建克隆类并从原始类继承可能不起作用。它需要代码引用这些子类而不是原始类 我更喜欢以一种更不引人注目的方式将属性附加到模型 如果我想为我的模型使用MVC特

假设我有一个包含所有模型类的项目,另一个项目包含一个MVC4 web应用程序(服务层、存储库层)

如果我想为我的模型属性使用特定于MVC的数据注释,如何在不依赖于MVC的情况下做到这一点

任何引用模型的非MVC项目也需要MVC引用。我更希望这些只在MVC使用模型时添加,而不是全部

最初我考虑的是分部类,但我知道它们不能用于交叉组装

在模型类之外创建克隆类并从原始类继承可能不起作用。它需要代码引用这些子类而不是原始类

我更喜欢以一种更不引人注目的方式将属性附加到模型

如果我想为我的模型使用MVC特定的数据注释 属性,如何在不依赖MVC的情况下实现这一点


通过使用视图模型。视图模型是在MVC应用程序中设计和定义的类,是传递给视图的类。永远不要将模型传递给视图。控制器操作可以查询服务层中的域模型,然后将这些域模型映射到视图模型,并将这些视图模型传递到视图。另一方面,您的
[HttpPost]
控制器操作应将视图模型及其各自的数据注释作为参数,将这些视图模型映射到其相应的域模型,并将域模型传递到您的服务层。

视图模型是从模型继承还是只是作为完整对象的容器?ViewModel绝对不应从模型继承。通过只允许视图所需的操作(和属性),它们充当模型和视图之间的分隔。您可以在视图模型中引用模型,但不能公开它,也可以模拟模型的一部分,然后可以进行映射(手动或在外部库的帮助下以减轻痛苦)。因此,在视图模型中复制模型属性以及附加到这些属性的验证属性。不过,在处理操作中需要在视图模型和模型之间进行某种转换,以提取相关数据?是的,确实需要在视图模型和模型之间进行某种转换,我建议您使用AutoMapper来处理这些操作。我看到的唯一缺点是使用viewmodels而不是模型,在我们当前的设置中,我们在模型绑定器中获取对象数据,并填充发布的对象和相关对象。因此,发布到操作的对象是预取的。