我的建议是在长时间使用此“事物”后进行的:
数据绑定的BindingModels(mvc或api)
用于在mvc上进行查看的ViewModels(您的api中可能包含一些mvc页面,因此最好在其中放置一个地方,可以是文档,简介页等。如果没有视图,则可以有零个ViewModels)这样做的好处是,您可以在Views / web.config中具有ViewModels命名空间引用,并且不会被api资源污染。
Web API资源的ResourceModel。在webapi中,嵌套资源也是在树中任何地方都可以访问的资源,这在mvc上并不常见,因此给资源命名很有意义。
如果要接收资源,则可以使用资源模型。记住,您收到的与您寄回的一样。
如果要为输入使用自定义绑定(这应该是默认方案),则可以使用绑定模型。
如果您出于管理目的,文档目的而拥有任何mvc视图,请使用ViewModels。
如果您在mvc上有一个表单页面,则也可以在POST控制器上使用BindingModel。对于MVC或WEBAPI上的帖子,无需具有其他模型。特别是当模型绑定器或格式化程序可以使用相同的数据注释理解并映射到相同的绑定模型时。
有时,您想创建一个包含资源和一些额外字段的绑定模型。继承是你的朋友。
有时您想使用多个资源和(可选,额外的字段)资源创建绑定模型,因为资源是您的朋友。
在MVC世界中,您也可以使用“资源”的概念,但是它并不常见。当您在同一项目上具有MVC和Web Api时,这将派上用场。
如果您需要对任何项目(例如文件夹结构,名称空间等)进行进一步评论,请告诉我。我非常乐于分享我的利弊经验。
哦,我忘记了,映射策略值得研究。我亲自进行自己的映射,但是将这种逻辑放在一个地方是无价的。
编辑:非常天真的例子
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;}
}