Rails 3中的分层MVC?

时间:2010-08-25 21:53:34

标签: ruby-on-rails model-view-controller hmvc

我读过HMVC(分层模型视图控制器),它的结构灵活。

看看这张照片:

http://techportal.inviqa.com/wp-content/uploads/2010/02/MVC-HMVC.png

我想知道Rails 3插件是否是Rails 3中HMVC的答案?

编辑:为什么我不能在这个上获得赏金?没有赏金按钮,错误?

4 个答案:

答案 0 :(得分:3)

根据对Toby的回答的评论,您似乎希望能够将MVC应用程序用作新应用程序中的组件。 Rails Engines(参见http://rails-engines.org)提供此功能。您只需安装引擎gem并将应用程序放在vendor / plugins中,其模块/视图/控制器都可以访问。

这并不真正符合HMVC,其中新应用程序中的控制器委托给其他控制器。但是像托比一样,我没有看到它的优势。

引擎方法的优点在于,只需将模型版本添加到新的应用程序app / model文件夹(同样适用于视图和控制器),即可覆盖插件中的任何模型。

我已经覆盖app / views / layouts,为我的身份验证应用/插件提供与其所包含的应用程序相同的外观。

对于Rails 3,Railtie取代引擎并得到官方支持(实际使用 - Action Mailer是一个Railtie插件。虽然我还没有使用它。

http://edgeapi.rubyonrails.org/classes/Rails/Railtie.html

上查看

在这里写一篇很好的文章http://www.igvita.com/2010/08/04/rails-3-internals-railtie-creating-plugins/

答案 1 :(得分:2)

Rails已经有很长时间的插件了。

我怀疑有一个技术原因导致控制器无法调度到另一个控制器,将请求对象传递给链。我只是不知道你通过这样做获得了什么 - 图表看起来像意大利面条。

对我而言,这是对MVC的滥用。我建议将逻辑推入较低级别的模型和类并创建一个支持这种逻辑的单一控制器,而不是创建一系列控制器,这样更简单,更易于维护。

答案 2 :(得分:1)

在Rails 3博客文章中,DHH提到了the Cells项目。我没有用它,但我要检查一下。

购物车示例很好地展示了这种功能如何清理您的应用程序代码。检索数据的代码应放在控制器中的某个位置。在每个动作或之前的过滤器中。 Cell似乎是更好的解决方案。

答案 3 :(得分:0)