【发布时间】:2010-11-05 23:12:49
【问题描述】:
是否有可能拥有基于 MVC 的基于 Web 的架构的布局,其中 SOA 是架构风格。或者换一种说法,服务可以是 MVC 的 M、V、C 的一部分吗?如果可以,每个服务可以包含哪些类型的服务。另外,你能给我一个真实的例子吗?
【问题讨论】:
是否有可能拥有基于 MVC 的基于 Web 的架构的布局,其中 SOA 是架构风格。或者换一种说法,服务可以是 MVC 的 M、V、C 的一部分吗?如果可以,每个服务可以包含哪些类型的服务。另外,你能给我一个真实的例子吗?
【问题讨论】:
在 SOA 应用程序中,您通常不包括前端(表示层)。您在 MVC 应用程序中使用这些服务,或者更好的是在 MVC 应用程序使用的单独“模型”项目中。
数据访问 -> 业务逻辑 -> 服务 -> 模型 -> MVC
重点是使用服务围绕应用程序的基础创建抽象,以允许多个客户端使用这些服务。
【讨论】:
我倾向于将在客户端/表示层中表示的模型称为 ViewModel,它只是模型的表示层视图。不是实际的领域模型。这在 SOA 中是必需的,因为模型使用者的上下文经常变化
在 SOA 中,我们尝试为合同找到一个规范的模式,因为现在和未来并非所有客户端都需要完全相同的模型视图。
因此,无论是 Web 客户端、服务客户端还是桌面客户端,如果您将 MVC 中的模型视为 ViewModel,这允许您将表示层的事物从服务层的事物中抽象出来,并且您更接近于规范架构。
所以一个示例视图 >> 控制器 >> ViewModel(Model) >> 数据契约 >> 服务
可以在此处找到如何构建这样的服务堆栈的示例:
选择使用 REST 架构还是使用完整的 WS-* SOAP 是一个单独的问题,不应影响您选择 MVC 作为表示模式。
当然也可能存在其他限制,无法使用其中的一种。
在 Microsoft 平台上为新的或企业 Web 开发选择演示模式是一项艰巨的任务,在我看来只有三个; View Model、Model-View-Presenter (MVP) 或 ASP.NET MVC(Model2 衍生产品)。
你可以在这里阅读全文ASP.NET MVC Patterns
【讨论】:
这取决于您所说的 SOA 是什么意思。如果您指的是 WS-* 标准,我不会推荐 MVC,因为您需要编写大量管道才能使其工作。
如果您正在寻找类似 REST 服务的东西,那么 MVC 模式实际上工作得很好。请求是资源的 HTTP 位置,它被传递给控制器,控制器通过模型加载数据,然后将其传递给视图,视图以所需的任何形式(JSON、XML、二进制等)返回它。或者,您通常可以直接返回结果,具体取决于您使用的框架。
埃里克
【讨论】: