Rails:可配置的可扩展模块化应用程序

灰猫

我想使用Rails来构建可扩展的模块化应用程序,该应用程序可以配置为符合个人需求。

让我解释一下我在“可扩展”和“模块化”下的理解。例如,假设我正在开发一个博客应用程序引擎,并且有一个名为的模型BlogEntry,其中包含一个简单的博客条目通常包含的内容-标题和内容。假设我希望此应用程序能够在2种模式下运行:

  • 简单BlogEntry地说只有两个属性-标题和内容
  • 在增强模式下-BlogEntry例如,扩展为具有更多属性时,它将与名为的单独模型进行多对多链接Tag

我的目标是:

  • 允许最终用户使用一些简单的机制以基本形式或扩展功能形式部署应用程序,例如安装其他程序包,启用/禁用配置开关,取消注释配置文件中的一行等。当然,可以有2个以上“模式”-这些添加大部分是独立的,并且可以同时启用其中的几个。
  • 明确分离代码库-一种仅实现基本功能,而另一种则实现其他可插拔的东西(例如,现有模型或新模型的其他属性);这些更改不仅应在模型本身中传播,而且还应在控制器,视图,gem需求,测试,路由规则,支持扩展功能模型所需的数据库迁移等中反映出来。
  • 对于模型,控制器和视图,有一些面向对象的原则:例如,基本模型BlogEntry只是一个简单的独立类,当插入标签功能时,类中包括某种增强模块,在BlogEntry某些情况下会添加代码BlogEntryController,甚至会增加某些输出在博客视图中指定的位置。

因此,如果您不想要任何复杂的功能,则应用程序将保持非常简单和基本。如果需要额外的支持,则可以使用多个插件扩展应用程序,因此它并不会成为一个庞大的应用程序—万事俱备。

实际上,这种可插入功能实际上存在于任何主要的高级Web开发平台中,例如MediaWiki,Moodle,WordPress等。

到目前为止,搜索“模块化导轨”的结果是:

  • Rails引擎-基本上,如果我理解正确,这是将大型应用程序分成几个较小的,准独立的应用程序并在它们之间建立链接的方法-这不是我想要的。这也允许在几个不同的应用程序中重用一些通用的Rails代码,这也不是我想要的。
  • Rails插件-基本上是一种将宝石形式的外部库轻松地包含到项目中的机制(带有额外的花哨功能,例如插件提供的生成器)-但是,对于需要与插件进行广泛集成的开发人员而言,这是一种解决方案。在最终用户管理员必须决定是否要使用此功能的方案中,这通常不太适合-启用或禁用该功能的配置过程并不简单。
  • 应用程序模板-基本上,是一个包装在生成器中的现成应用程序,能够快速生成类似的应用程序。这对于代码重用可能很有用,但与可配置的模块化概念无关。

我敢打赌,有无数种方法可以实现我所说的内容。最好的是什么?在哪里可以看到此类模块化应用程序的一个好例子?

杰罗克金德

我认为Rails Engines确实是您想要的。

我为作为引擎交付的几个应用程序做出了贡献,以基本完成您所描述的内容。这是我主要开发的其中之一:http : //github.com/team-umlaut/umlaut

这并不总是那么简单,在很多地方您需要决定如何设置,Rails文档或明显的约定并不一定会指导您。我同意引擎(非常有限)文档并不一定会引导您走这条路。但是引擎足以完成需要做的事情。还给您足够的绳索来吊起自己并使事情变得过于复杂。

我建议使用rails plugin new name_of_engine --full-而不是 创建Engine骨架--mountable我认为--mountable对于这种特定类型的引擎用例而言,过于复杂没有好处。(其他人可能会不同意;是的,对于这种情况,选择和最佳实践并不总是很清楚)。

基本上不推荐使用Rails插件;当前支持的唯一类型的插件是plugins-as-gems -其中Engine是功能最强大的(可以与Rails进行最多类型的交互),您将需要使用此类插件。

我同意您的意见,为什么这里的应用程序模板不够用-尽管您可能想提供一个应用程序模板,以使用gemfile中的引擎以及本地应用程序中生成的所有必要的本地存根创建一个应用程序。我在的最新版本中进行了此操作umlaut,但直到最近才这样做,这并不是绝对必要的,除非您至少有了基本的概念证明,否则我将保留它。

Rails并不一定鼓励这样做,但是有可能并且可以进行足够的工作,我同意您适合某些情况。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Spring的模块化Web应用程序

来自分类Dev

在模块化应用程序中使用实体框架

来自分类Dev

了解创建模块化应用程序的riot.js功能

来自分类Dev

模块化Grails应用程序(Grails 2.3.x)

来自分类Dev

如何构建Java桌面应用程序运行时模块化?

来自分类Dev

模块化WPF应用程序的框架?

来自分类Dev

将Spring模块化应用程序部署到tomcat后,“ Autowire”失败

来自分类Dev

如何在模块化应用程序中处理通用类/接口?

来自分类Dev

WPF应用程序安全性和数据访问-MEF模块化应用程序MVVM

来自分类Dev

引用模块化应用程序中具有相同依赖项的多版本

来自分类Dev

模块化应用程序模式:如何检查哪个是调用模块

来自分类Dev

无法模块化AngularJS应用程序

来自分类Dev

模块化Express / Socket.io应用程序

来自分类Dev

如何编写干净的模块化express.js应用程序

来自分类Dev

套餐一非模块化的JavaFX应用程序

来自分类Dev

可配置的Vue前端应用程序

来自分类Dev

模块化Shiny应用程序:CSV和图表模块

来自分类Dev

模块化闪亮应用程序中的ggplots对齐

来自分类Dev

如何模块化angularjs应用程序?

来自分类Dev

如何配置moditect-maven-plugin以在模块化应用程序中使用自动值库?

来自分类Dev

模块化应用

来自分类Dev

Delphi 2010-模块化应用程序,如何在主机应用程序中获取类属性?

来自分类Dev

使用Spring的模块化Web应用程序

来自分类Dev

如何在extjs应用程序中配置可扩展

来自分类Dev

模块化Sinatra应用程序,可全局设置错误处理和配置

来自分类Dev

错误处理程序不在模块化Sinatra应用程序中运行

来自分类Dev

在模块化Java应用程序中配置ehCache的最佳实践

来自分类Dev

在Java中使模块模块化/可扩展

来自分类Dev

无法在模块化 Rails 应用程序中运行测试

Related 相关文章

  1. 1

    使用Spring的模块化Web应用程序

  2. 2

    在模块化应用程序中使用实体框架

  3. 3

    了解创建模块化应用程序的riot.js功能

  4. 4

    模块化Grails应用程序(Grails 2.3.x)

  5. 5

    如何构建Java桌面应用程序运行时模块化?

  6. 6

    模块化WPF应用程序的框架?

  7. 7

    将Spring模块化应用程序部署到tomcat后,“ Autowire”失败

  8. 8

    如何在模块化应用程序中处理通用类/接口?

  9. 9

    WPF应用程序安全性和数据访问-MEF模块化应用程序MVVM

  10. 10

    引用模块化应用程序中具有相同依赖项的多版本

  11. 11

    模块化应用程序模式:如何检查哪个是调用模块

  12. 12

    无法模块化AngularJS应用程序

  13. 13

    模块化Express / Socket.io应用程序

  14. 14

    如何编写干净的模块化express.js应用程序

  15. 15

    套餐一非模块化的JavaFX应用程序

  16. 16

    可配置的Vue前端应用程序

  17. 17

    模块化Shiny应用程序:CSV和图表模块

  18. 18

    模块化闪亮应用程序中的ggplots对齐

  19. 19

    如何模块化angularjs应用程序?

  20. 20

    如何配置moditect-maven-plugin以在模块化应用程序中使用自动值库?

  21. 21

    模块化应用

  22. 22

    Delphi 2010-模块化应用程序,如何在主机应用程序中获取类属性?

  23. 23

    使用Spring的模块化Web应用程序

  24. 24

    如何在extjs应用程序中配置可扩展

  25. 25

    模块化Sinatra应用程序,可全局设置错误处理和配置

  26. 26

    错误处理程序不在模块化Sinatra应用程序中运行

  27. 27

    在模块化Java应用程序中配置ehCache的最佳实践

  28. 28

    在Java中使模块模块化/可扩展

  29. 29

    无法在模块化 Rails 应用程序中运行测试

热门标签

归档