我在使用这个'东西'的时间很长之后的建议:
BindingModels 用于数据绑定(mvc 或 api)
ViewModels 用于 mvc 上的视图(您的 api 中可能有一些 mvc 页面,所以最好有一个
这个地方,这可以是文档,介绍页面,等等。如果没有视图,那么您可以拥有零个 ViewModel)这样做的一个好处是您可以在您的 Views/web.config 中拥有 ViewModels 命名空间引用,并且它不会被您的 api 资源污染。
ResourceModel 用于 Web api 资源。在 webapi 中,嵌套资源也是树中任意位置的资源,这在 mvc 上并不常见,因此将它们命名为资源很有意义。
如果您想接收资源,可以使用您的资源模型。记住你收到的和你发回的一样。
如果您想为输入自定义绑定(这应该是您的默认方案),您有自己的绑定模型。
如果您有任何 mvc 视图,出于管理目的、文档等目的,请使用您的 ViewModel。
如果你在 mvc 上有一个表单页面,你也可以在 POST 控制器上使用你的 BindingModel。无需为 MVC 或 WEBAPI 上的帖子使用不同的模型。特别是当模型绑定器或格式化程序可以使用相同的数据注释来理解并映射到相同的绑定模型时。
有时,您想创建一个包含资源和一些额外字段的绑定模型。继承是你的朋友。
有时您希望创建具有多个资源和(可选地,额外字段)资源作为属性的绑定模型。
在 MVC 世界中,您也可以使用“资源”的概念,但它不太常见。当您在同一个项目中使用 MVC 和 Web Api 时,这会派上用场。
如果您需要任何项目(如文件夹结构、命名空间等)的更多 cmets,请告诉我。我非常乐意分享我的缺点经验。
哦,我忘了,映射策略值得研究。我个人自己做映射,但是将这个逻辑放在一个地方是无价的。
编辑:
非常幼稚的例子
ContactViewModel{
string Name {get;}
string LastName {get;}
List<Country> AvailableCountries {get;}
Country Country {get;}
bool IsAdmin {get;}
}
ContactBindingModel{
string Name {get;set;}
string LastName {get;set;}
int Country {get;set;}
}
ContactResourceModel{
string Name { get;set;}
string LastName {get;set;}
Country Country {get;set;}
string IsAdmin {get;}
}