【问题标题】:MVCS - Model View Controller ServiceMVCS - 模型视图控制器服务
【发布时间】:2011-08-07 19:50:02
【问题描述】:

我已经使用 MVC 很长时间了,听说过“Service”层(例如在 Java Web 项目中),我一直想知道这是否是 真实的架构模式因为我找不到很多关于它的信息。

MVCS 的想法是在控制器和模型之间有一个服务层,以封装所有可能在控制器中的业务逻辑。这样,控制器就在那里转发和控制执行。并且您可以在许多控制器(例如,网站和 Web 服务)中调用 Service,而无需重复代码。

【问题讨论】:

  • “我一直在想,这是否是一种真正的架构模式”……嗯,与其他设计模式差不多或不那么真实 :) 这一切都是为了选择最有意义的抽象 - - 在这种情况下,当您处理各种上游数据源(数据库模型、其他 Web 服务等)时,MVCS 似乎是比 MVC 更有用的抽象,尤其是当您开始考虑公开您的作为服务工作。当我有一个后来公开为 REST API 的 Web 应用程序时,这种模式帮助我重用了很多代码。

标签: model-view-controller architecture architectural-patterns


【解决方案1】:

多年来我一直在使用 MVCS 模式,但我不知道其他人这样做过,因为我在网上找不到任何可靠的信息。如果你愿意,我会本能地开始使用它,它从来没有让我失望过 Laravel 项目。我会说它对于中型项目来说是一个非常可维护的解决方案,尤其是在业务逻辑不断变化的敏捷环境中工作时。关注点分离非常方便。

说到这里,我发现服务层对于小型项目或原型来说是不必要的,什么都不是。我犯了在制作原型时使项目过于复杂的错误,这最终意味着需要更长的时间才能将你的想法付诸实践。如果您认真考虑在中期维护项目,那么 MVCS 是 IMO 的完美解决方案。

【讨论】:

    【解决方案2】:

    服务层可以有多种解释方式,但它通常是您拥有核心业务处理逻辑的地方,位于 MVC 架构之下,但位于数据访问架构之上。

    例如,一个完整系统的层可能如下所示:

    1. 视图层:您选择的 MVC 框架和代码
    2. 服务层:您的控制器将调用该层的对象来获取或更新模型或其他请求。
    3. 数据访问对象:这些是您的服务层将调用以获取/更新所需数据的抽象。该层通常会调用数据库或其他一些系统(例如:LDAP 服务器、Web 服务或 NoSql 类型的数据库)

    然后服务层将负责:

    • 从各种数据源(或数据访问对象)检索和创建“模型”。
    • 跨各种存储库/资源更新值。
    • 执行特定于应用程序的逻辑和操作等。

    您在 MVC 中使用的模型可能来自也可能不来自您的服务。您可能希望获取您的服务提供给您的结果,并将它们处理成更特定于您的媒体(例如:网页)的模型。

    【讨论】:

    • 我通常使用服务进行外部访问。虽然 MVC 将包含我所有的应用程序特定逻辑,但我将使用 DBService 或 FacebookOAuthService 之类的东西来进行对其他系统的所有外部调用。或者包装第三方库而不是紧密集成,可以更容易地切换库。对我来说,考虑这样的服务很有意义。
    • 此外,您的服务层的模型将更像是一个数据传输对象,这可能会或可能不会直接转换为直接满足视图要求的东西
    • 这听起来像是一个 MVC,但增加了外观以保持控制器清洁。
    【解决方案3】:

    我自己一直在考虑这种模式,而在其他任何地方都没有看到任何对此的参考,并在 Google 上搜索并在这里找到了您的问题 :)

    即使在今天,也没有多少人谈论或张贴关于这个的

    视图-控制器服务模式。

    想让你知道其他人也有同样的想法,上图是我的看法。

    目前我正在一个项目中使用它。

    我在模块中有它,上图中的每一层都有它自己的独立模块。

    服务层是“连接器”“中间人”“服务器端控制器”,因为“客户端”端控制器为客户端做的,“服务”为服务器做的。

    换句话说,客户端“控制器”仅与“服务”即服务器端控制器“对话”。

    控制器 ---> 来自

    服务层获取信息或将信息提供给服务器端需要它的层。

    服务本身不做任何事情,只是将服务器层与他们需要的东西连接起来。

    这是一个代码示例:

    【讨论】:

    • 我对这种架构风格的唯一担忧是假设数据模型将具有与“视图”要求相同的“形状”。如果它们是 1 比 1 或接近它,你可以专门为视图堵塞几个属性,我想这没关系,但很多时候 DataModels 是从存储角度设计的,而 ViewModel 是从视图透视。
    • 有“DataModels”和“ViewModels”,上图做的很快,做的很差:)
    猜你喜欢
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    相关资源
    最近更新 更多