我应该为ASP.NET MVC和ASP.NET Web API创建单独的模型吗?

我应该为ASP.NET MVC和ASP.NET Web API创建单独的模型吗?,asp.net,asp.net-mvc,asp.net-web-api,Asp.net,Asp.net Mvc,Asp.net Web Api,我在同一个项目中使用ASP.NETMVC和ASP.NETWebAPI。我正在讨论是否要将这些模型分开保存,即将MVC模型放在模型文件夹中,将Web API模型放在ApiModels文件夹中 我不应该这样做吗?分离它们会导致问题吗?将它们放在一起并对MVC和Web API使用相同的模型会导致问题吗?像往常一样,这类问题的答案是:嗯,这取决于 就我个人而言,我有一个仅用于poco模型的类库,数据层、restful层和web应用程序都引用了该类库 在此之前我发现的唯一问题是LinqToSql生成的类,

我在同一个项目中使用ASP.NETMVC和ASP.NETWebAPI。我正在讨论是否要将这些模型分开保存,即将MVC模型放在模型文件夹中,将Web API模型放在ApiModels文件夹中


我不应该这样做吗?分离它们会导致问题吗?将它们放在一起并对MVC和Web API使用相同的模型会导致问题吗?

像往常一样,这类问题的答案是:嗯,这取决于

就我个人而言,我有一个仅用于poco模型的类库,数据层、restful层和web应用程序都引用了该类库


在此之前我发现的唯一问题是LinqToSql生成的类,因此可能EF也可以有循环引用,当在ApiController类中序列化为JSON时,WebApi会阻塞循环引用,它以无限循环结束。

与往常一样,这类问题的答案是:嗯,这取决于

就我个人而言,我有一个仅用于poco模型的类库,数据层、restful层和web应用程序都引用了该类库

在此之前我发现的唯一问题是LinqToSql生成的类,因此可能EF也可以有循环引用,当在ApiController类中序列化为JSON时,WebApi会阻塞循环引用,它以无限循环结束。

我一眼就说不,因为两者都有自己的目的

mvc中的viewmodel用于表示视图的属性以及它所处理的数据的验证。其中,as web api似乎没有用于此目的。因此,即使有可以用作viewmodel的实体,我们也始终具有属性

此外,它还将使应用程序更难根据更改进行管理

但是,如果您的应用程序小得多,您可以使用它。

我一眼就说不,因为两者都有自己的用途

mvc中的viewmodel用于表示视图的属性以及它所处理的数据的验证。其中,as web api似乎没有用于此目的。因此,即使有可以用作viewmodel的实体,我们也始终具有属性

此外,它还将使应用程序更难根据更改进行管理


但是,如果您的应用程序要小得多,您可以使用它。

我想说,如果您需要重新编码或复制,如果您将它们分开,那么就不要将它们分开。如果将它们分开意味着不复制任何东西,那么你就可以安全而明智地分开。

我想说,如果你必须重新编码或复制,如果你把它们分开,那么就不要把它们分开。如果分开它们意味着不复制任何东西,那么你分开是安全和明智的

我不应该这样做吗

我必须同意codehunter和HollyStyles的观点。这要视情况而定,但你应该倾向于将它们分开

分离它们会导致问题吗

不一定,但这取决于你对问题的定义。如果你有一个幼稚的或没有经验的开发人员在处理代码,他们可能会看着它说,嘿,你的代码不是干的,你很烂。当然,他们可能是错的,但你仍然必须向他们解释原因,所以这可能是个问题

将它们放在一起,并对MVC和 Web API导致问题

不,让我解释一下原因。MVC和WebAPI的模型由不同的框架使用。例如,为了确保模型属性呈现为隐藏输入,可以使用[HiddenInput]属性对其进行修饰。WebAPI模型中没有这样的概念。类似地,MVC具有通常不会在WebAPI模型上使用的显示、远程和其他属性

另一方面,WebAPI模型可以使用在MVC中没有任何意义的[DataContract]和[DataMember]属性。您可以使用这些为API输出指定特殊名称,例如,重命名XML或JSON节点

虽然可以在MVC和WebAPI中使用一个模型,但最终这些模型可能会有混合关注点:例如,API输出格式的[DataMember]属性和MVC表单视图呈现的[HiddenField]属性。人们可以把这看作是污染的表现

只要您的模型类是没有方法或智能行为的简单数据容器,那么使用相同属性/模式的不同模型类并不违反DRY。为什么?因为它允许您使用不同的属性来修饰这些类,以解决不同的问题

同样,如果您的模型不使用这些属性中的任何一个,并且您也不打算使用这些属性,那么MVC和WebAPI都可以使用相同的模型。所以答案是,这要看情况而定

我不应该这样做吗

我必须同意codehunter和HollyStyles的观点。这要视情况而定,但你应该倾向于将它们分开

公司 uld分离会导致问题吗

不一定,但这取决于你对问题的定义。如果你有一个幼稚的或没有经验的开发人员在处理代码,他们可能会看着它说,嘿,你的代码不是干的,你很烂。当然,他们可能是错的,但你仍然必须向他们解释原因,所以这可能是个问题

将它们放在一起,并对MVC和 Web API导致问题

不,让我解释一下原因。MVC和WebAPI的模型由不同的框架使用。例如,为了确保模型属性呈现为隐藏输入,可以使用[HiddenInput]属性对其进行修饰。WebAPI模型中没有这样的概念。类似地,MVC具有通常不会在WebAPI模型上使用的显示、远程和其他属性

另一方面,WebAPI模型可以使用在MVC中没有任何意义的[DataContract]和[DataMember]属性。您可以使用这些为API输出指定特殊名称,例如,重命名XML或JSON节点

虽然可以在MVC和WebAPI中使用一个模型,但最终这些模型可能会有混合关注点:例如,API输出格式的[DataMember]属性和MVC表单视图呈现的[HiddenField]属性。人们可以把这看作是污染的表现

只要您的模型类是没有方法或智能行为的简单数据容器,那么使用相同属性/模式的不同模型类并不违反DRY。为什么?因为它允许您使用不同的属性来修饰这些类,以解决不同的问题

同样,如果您的模型不使用这些属性中的任何一个,并且您也不打算使用这些属性,那么MVC和WebAPI都可以使用相同的模型。所以答案是,这要看情况而定