2010-04-15 46 views
2

我想开发一些非平凡的Rails应用程序,它们都实现了一组核心功能,但每个应用程序都有一些特定的定制,扩展和美学差异。我怎样才能将所有这些系统的核心功能(模型,控制器,帮助器,支持类,测试)拉出来,以便更新内核将使每一个基于它的应用程序都受益?如何抽象出几个Rails应用程序的核心功能?

我见过Rails引擎,但它们似乎太分离了,几乎被抽象出来建造。我认为他们可以将一个组件添加到现有的应用程序,例如将博客引擎添加到现有的电子商务网站。由于引擎似乎主要是自包含的,因此在保持DRY的同时覆盖它们的功能和视图似乎很困难和不方便。

我也考虑过把代码抽象成一个宝石,但是这似乎有点奇怪。我是否会根据Rails gem制作宝石,并在其中定义模型&控制器,然后在我的各种应用程序中对它们进行子类化?还是我在包含在我的各种应用程序中的不同位置的gem中定义了许多模块?我如何测试gem,然后测试一组定制和覆盖它的功能?我还关心如何开发gem和Rails应用程序,我可以将gem的git存储库供应给应用程序并推送,因此我无需在每次迭代中构建新的gem?此外,有没有私人宝石主机/我可以设置自己的宝石来源?

此外,这种承诺的任何一般建议?抽象范式要坚持?需要阅读?以前做过这些的聪明人的评论?谢谢!

回答

1

从来没有做过这样的事情,但我想这一个Rails插件将是它在正确的地方:

http://guides.rubyonrails.org/plugins.html#models

http://guides.rubyonrails.org/plugins.html#controllers

http://guides.rubyonrails.org/plugins.html#helpers

而且你可以创建一个宝石其后出:

http://guides.rubyonrails.org/plugins.html#plugingems

+0

一个插件确实是最简单的方法... – severin 2010-04-15 08:45:41

+0

你可以尝试和解释我将如何重新打开(或子类如果重新打开是不可能的)在我的插件中定义的类在应用程序内?我的主要问题是在插件和应用程序之间共享代码,其中模型的正常行为在插件中定义,但应用程序仅覆盖几个方法。如果我在应用程序中定义模型,那么Rails首先会在那里找到它,找到它正在寻找的类,并且缺少的常量被定义。 Rails从不查看插件,这意味着我的核心功能都没有通过。 – hornairs 2010-04-17 18:01:43

相关问题