【问题标题】:Can we implement SOA style in MVC architecture我们可以在 MVC 架构中实现 SOA 风格吗
【发布时间】:2010-11-05 23:12:49
【问题描述】:

是否有可能拥有基于 MVC 的基于 Web 的架构的布局,其中 SOA 是架构风格。或者换一种说法,服务可以是 MVC 的 M、V、C 的一部分吗?如果可以,每个服务可以包含哪些类型的服务。另外,你能给我一个真实的例子吗?

【问题讨论】:

    标签: model-view-controller soa


    【解决方案1】:

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

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

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

    【讨论】:

    • 我喜欢你的回答,但对有 两个 模型感到有点困惑——MVC plus 中的 model你提到的那个。 MVC 是否有理由不直接与服务对话(无论是在模型中还是在控制器中)?
    • @Kirk,不,没有。但是,我发现在模型中抽象服务会更好。然后我还可以创建自己的视图模型,这通常是必要的,因为模型不能 100% 与视图对齐。
    【解决方案2】:

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

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

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

    所以一个示例视图 >> 控制器 >> 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

    【讨论】:

      【解决方案3】:

      这取决于您所说的 SOA 是什么意思。如果您指的是 WS-* 标准,我不会推荐 MVC,因为您需要编写大量管道才能使其工作。

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

      埃里克

      【讨论】:

      • 如果我们考虑电子投票系统,我已经将它们实现为注册服务、认证服务、投票服务等......如果我必须使用 MVC,我可能会重新组织这些服务以便它们适合 MVC 的模型视图和控制器。为了让这些服务进行交互,我可以使用 REST 技术。这是它的工作方式吗?
      • 我不同意。使用 MVC 和任何平台上的任何其他框架,一个真正的面向服务的应用程序是完全可能的。这就是 SOA 的意义所在。 MVC 与它没有任何关系,前端应该只是消费服务。
      • @Dustin,对于给定的 SOA 值,我同意 MCV 可以适用于 SOA。我希望我的帖子没有暗示其他!我的主要观点是,SOA 通常包含 WS-* 的东西,这在使用 MVC 时很难使用。我指的是常见的 MVC 技术,而不是一般的 MVC 模式,因为这会打开一个全新的蠕虫罐。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-24
      • 1970-01-01
      • 1970-01-01
      • 2019-06-25
      • 2012-02-13
      • 2015-11-15
      • 2014-02-19
      相关资源
      最近更新 更多