MVC仅作为表示层

时间:2015-11-24 17:16:14

标签: c# asp.net-mvc asp.net-mvc-4 asp.net-web-api

我有一个WebAPI Web服务,它充当客户端应用程序(WinForms和Mobile)的业务逻辑层。

现在我想创建一个仅作为表示层的MVC应用程序,我怀疑这个架构是否有意义,或者它是否打破了MVC概念。

如果它有用,那么MVC应用程序(作为表示层)和WebAPI服务(作为业务逻辑层)之间的正确/正确交互方式是什么?

如果有人能给我一些代码示例,我们将不胜感激。

3 个答案:

答案 0 :(得分:3)

如果你以这种方式使用mvc就可以了,你的控制器可以访问webapi并将数据提供给模板。

您可能还会将angularjs视为视图/模板,而控制器可以将webapi称为数据。

答案 1 :(得分:2)

虽然我认为其他答案都是准确的,但您可能会想到其他一些问题。

首先,您的WebAPI可能是您的业务实施的地方。实际上,您可能已经处理过:

  • 与业务相关的例外
  • 验证
  • 可用的操作

除非某个功能背后的业务规则发生变化,否则您的Api不应该发生变化。

我想在此指出的是一件事: 让您的用户界面完全独立于您的API

使用带有WebApi

的MVC应用程序的风险

所有代码在一起=多个原因改变同样的事情

通过使用MVC应用程序,您可能想要将WebApi和MVC应用程序打包在同一解决方案中。您还可以将所有内容部署在一起。但是这样做,你可能会得到一大堆代码,其中部件不会以相同的速度发展(即:用户界面将会发生变化,但是每次需要修复UI时,Api都会发生变化。并且对API的每个更改都会影响UI。否。)

所有代码一起启用快捷方式

我的意思是,如果所有内容都打包在一起,开发人员可能会试图直接调用某个方法而不是调用应该是唯一有效外观的API。采取的任何快捷方式都可能导致代码重复,错误,验证错误等。 再说一遍:不要将您的MVC应用程序与您的API打包在一起。

解决方案

使用Javascript框架

其他建议很好。 AngularJS,ReactJS,EmberJS都是很好的框架。 (还有其他选择适合您需求的那个)但同样,它将是您的架构的一个不错的选择,因为您将在您的UI应用程序和您的API应用程序之间创建明确的分离关注。您的业​​务逻辑将得到很好的保护,您将确保您的代码仅通过HTTP调用进行调用,这是您API的唯一有效外观。换句话说,你确保没有人会采取捷径。

在自己的项目中使用.NET MVC应用程序

如果您仍想使用.NET MVC,我建议您通过HTTP调用您的API:没有快捷方式。我将创建一个不同的解决方案,并使用一个单独的MVC项目,使用HttpClient或类似RestSharp的方式调用API。您想要的是避免将UI绑定到API代码。您希望将UI绑定到API外观(api控制器)定义的合同而不是它们的实现。

答案 2 :(得分:1)

我认为,如果可以在您的情况下使用JavaScript MVC frameworks.之一,我认为更好 我认为AngularJS,ReactJS或EmberJS将是最适合您目的的变种。我不认为调用ASP.MVC操作,然后再从那里再调用WEB API,这是个好主意,imho。