我想使用 Rails 构建一个可扩展的模块化应用程序,该应用程序可以配置为符合自己的要求。
让我解释一下我对“可扩展”和“模块化”的理解。例如,假设我正在开发一个博客应用程序引擎,并且我有一个名为的模型BlogEntry
,它包含一个简单的博客条目通常包含的内容——标题和内容。假设我希望这个应用程序能够以 2 种模式运行:
- 简单化
BlogEntry
只有两个属性 - 标题和内容 - 在增强模式下 - when
BlogEntry
扩展为具有更多属性,例如,它将与名为Tag
.
我的目标是:
- 让最终用户使用一些简单的机制以基本形式或扩展功能形式部署应用程序,例如安装附加包,启用/禁用配置开关,取消注释配置文件中的一行等。当然,可能不止2 “模式” - 这些添加大部分是独立的,其中几个可以同时启用。
- 代码库的清晰分离——一个只实现基本功能,一个实现额外的可插入的东西(例如现有模型或新模型的附加属性);这些更改不仅应该在模型本身中传播,还应该反映在控制器、视图、gem 需求、测试、路由规则、支持扩展功能模型所需的数据库迁移等中。
- 对模型、控制器和视图有一些面向对象的原则:例如,基本模型
BlogEntry
只是一个简单的独立类,当插入标签功能在类中包含某种增强模块时,在某些BlogEntry
部分添加一些代码BlogEntryController
甚至添加一些输出博客条目视图中的指定位置。
因此,如果一个人不想要任何复杂的功能,应用程序仍然非常简单和基本。如果需要额外功能,可以使用多个插件扩展应用程序,因此它最终不会成为一个庞大的单一应用程序,即万事万物的臃肿软件。
事实上,这种可插拔的功能几乎存在于任何主要的高级 Web 开发平台中,例如 MediaWiki、Moodle、WordPress等。
到目前为止,搜索“模块化导轨”得到了:
- Rails 引擎——基本上,如果我理解正确的话,它是一种将大型应用程序分成几个较小的、准独立的应用程序并在它们之间建立链接的方法——这不是我想要的。这也允许在几个不同的应用程序中重用一些常见的 Rails 代码,这又不是我想要的。
- Rails 插件 - 基本上,一种可以轻松地将外部库以 gems 形式包含到项目中的机制(带有额外的花里胡哨,例如插件提供的生成器) - 但它是需要与插件广泛集成的开发人员的解决方案。这通常不适合最终用户管理员必须决定他是否需要此功能的方案 - 没有简单的配置过程来启用或禁用它。
- 应用程序模板——基本上,一个现成的应用程序包装在一个生成器中,能够快速生成这样的应用程序。这可能对代码重用有用,但与可配置模块化概念无关。
我敢打赌,有无数种方法可以实现我所说的。什么是最好的?我在哪里可以看到这种模块化应用程序的一个很好的例子?