【问题标题】:Framework design patterns框架设计模式
【发布时间】:2010-11-14 05:23:42
【问题描述】:

我(我相信你们中的许多人)非常熟悉 Rails 的 MVC 设计模式以及 Django(和其他人的)MTV 设计模式。我想知道其他框架用于 Web 应用程序开发的其他模式。他们的优势/劣势是什么?

谢谢

【问题讨论】:

    标签: ruby-on-rails model-view-controller design-patterns


    【解决方案1】:

    我的 PHP 微型(60 行)MVC 引擎http://code.google.com/p/barebonesmvc-php/ 已成功用于 Cisco 的嵌入式消费类设备,它依赖于“模板方法”模式,其中父类指定算法的步骤,但子类负责实现其中的一些步骤。

    static function sendResponse(IBareBonesController $controller) {
          $controller->setMto($controller->applyRequestToModel());
          $controller->mto->applyModelToView();
    }
    

    在我的引擎中,开发者需要实现 applyRequestToModel。不仅 Spring 的 Web/MVC 模块,还有我的 applyModelToView 方法,都采用 map/hash/assoc-array 并使其可用于视图,除了 Spring 以抽象的名称 (ModelAndView) 将 MVC 的两个方面混为一谈,而我的抽象更适合命名为 ModelTransferObject(又名 $mto)。

    说到Spring,在GoF参考中关于模板方法模式,GoF指的是“控制反转”

    【讨论】:

    • 这只是使用策略(又名“模板化方法”)模式实现的 MTV。所以是的,它在内部使用了另一种模式,因为每个软件在内部都使用不止一种模式,但总的来说它仍然只是 MTV。
    • 阅读您的 GoF,策略和模板方法模式相同。相关的,是的,相同的没有。
    【解决方案2】:

    MTV 只是通常称为 MVC 的更准确的名称。所以事实上,Rails 和 Django 使用相同的模式。 Is 已经建立了多年,几乎没有任何框架做不同的事情,除了半对象模式。然而,halb-objects 尚未在网络世界中建立。

    “真正的”MVC 是经典 GUI 和 JavaScript 中的一种模式(如果您只看浏览器中发生的事情)。它根本不适用于万维网,因此必须对其进行调整。结果令人困惑地通常也称为 MVC,而 MTV 是更准确的描述。

    【讨论】:

    • Web 的 MVC 应该更简单,不需要监听,Web 服务器会这样做,请求就是事件。不需要另一种设计模式。 Web 的 MVC 本质上归结为中介者模式的一个具体实例,控制器在视图和模型之间进行中介。
    • 与 MVC 相比,Web 版本需要在每个操作上使用模板创建 GUI。这在经典 GUI 中不是必需的。因此,Web 中有两个主要区别,“视图”的概念及其与其他部分(模型、控制器)的交互发生了巨大变化。这就是为什么像 MTV 这样的新名称是合适的。
    • PS....我已经在 J​​avascript 中实现了“真正的”MVC,它确实不是只是像你暗示的那样“开箱即用”。您创建侦听器,然后小部件注册以接收事件通知。它使您可以使支持 Ajax 的小部件保持同步,例如,当您添加评论时,显示 cmets 数量的小部件也可以更新。
    • MVC 很好地描述了在单一 JavaScript 中发生的事情(没有服务器请求)。它的结构与例如相同的方式。 Qt 或 GTK+。这是原始的、普通的 MVC。但是,如果您添加服务器请求(AJAX 等)并在其上运行应用程序的主要部分,那就完全不同了。
    猜你喜欢
    • 1970-01-01
    • 2011-10-15
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 2012-03-06
    • 1970-01-01
    • 2012-06-07
    相关资源
    最近更新 更多