我们可以在MVC架构中实现SOA风格吗?

时间:2010-11-05 23:12:50

标签: model-view-controller soa

是否有可能基于基于Web的体系结构的布局,其中SOA是架构风格。或者换句话说,服务可以成为MVC的M,V,C的一部分。如果是这样,每种服务都可以包含哪些服务。另外,你能给我一个真实世界的例子吗?

3 个答案:

答案 0 :(得分:6)

在SOA应用程序中,您通常不包括前端(表示层)。您正在使用MVC应用程序中的这些服务,或者更好地在MVC应用程序使用的单独“模型”项目中使用这些服务。

数据访问 - >业务逻辑 - >服务 - >型号 - > MVC

重点是使用服务在应用程序的基础上创建抽象,以允许多个客户端使用这些服务。

答案 1 :(得分:4)

我倾向于将客户端/表示层中表示的模型称为ViewModel,它只是模型的表示层视图。不是实际的域模型。这在SOA中是必需的,因为模型消费者的上下文经常发生变化

在SOA中,我们试图找到合同的规范模式,因为很可能并非所有客户现在和将来都需要完全相同的模型视图。

因此,无论是Web客户端,服务客户端还是桌面客户端,如果您将MVC中的模型视为ViewModel,这样您就可以将表示层事物从服务层事物中抽象出来,并且您可以更接近规范架构。

示例View>>控制器>> ViewModel(Model)>>数据合同>>服务

如何构建这样的服务堆栈的示例可以在这里找到:

SOA Design Pattern

决定是使用REST架构还是完整的WS- * SOAP是一个单独的问题,不应影响您选择MVC作为表示模式。

当然可能有其他限制条件妨碍使用其中一种。

在Microsoft平台上为新的或企业Web开发选择演示模式是一项艰巨的任务,在我看来只有三个; View Model,Model-View-Presenter(MVP)或ASP.NET MVC(Model2衍生物)。

您可以在此处阅读完整文章ASP.NET MVC Patterns

答案 2 :(得分:1)

这取决于您对SOA的意思。如果您指的是WS- *标准,我不建议使用MVC,因为您需要编写大量的管道才能使其工作。

如果您正在寻找类似REST服务的东西,那么MVC模式实际上非常有效。请求是资源的HTTP位置,它被传递给控制器​​,控制器通过模型加载数据,然后将其传递给视图,该视图以任何所需的形式(JSON,XML,二进制等)返回它。或者,您通常可以直接返回结果,具体取决于您使用的框架。

埃里克

相关问题