【发布时间】:2014-06-12 16:46:01
【问题描述】:
我正在开发一个相当大且相当定制的 ruby on rails spree 商业安装。我正在尝试决定如何最好地构建它,这样我就可以继续升级大礼包,而不必担心它会破坏我的修改。
在过去,我遵循一般的狂欢文档并通过使用装饰器、覆盖和有时完全覆盖视图进行了修改。这工作正常,但有两个问题。
1.) 当类通过装饰器打开和扩展时,对程序的推理可能会更加困难。如果您可以打开文件,例如 Spree::Product 并查看代码,然后按照祖先的顺序工作,而不是知道在系统的各个部分中正在打开和修改类,它会容易得多。
2.) 如果你走这条路,升级 Spree 可能会很困难。如果您覆盖了一个视图并且它在下一个版本的 spree 中发生了变化,您将无法知道。您所能做的就是升级并希望您的一项测试或手动测试在它出现故障时将其恢复。
然而,上述的好处当然是它是一种开始修改的非常简单的方法,如果您只进行少量和小的修改,那么它可能没问题。
但是有更好的选择吗?我一直在考虑的一种方法是简单地分叉 Spree 并直接在分叉的 spree 代码库中进行更改。然后,当我想升级时,我可以简单地将任何新的更改从 spree 中提取到我的分叉存储库中。这种方法的优点是,只要我覆盖的视图发生更改,git 就会通知我。然后我可以手动合并它并忽略它或采取行动。这里有没有人在实践中这样做过?有没有我忽略的缺点?
【问题讨论】:
-
我认为你将有很多变化,你将不得不理清你改变了什么与狂欢改变了什么。它很可能比您使用的大礼包建议的方法更痛苦。至少您可以为要覆盖的每个方法编写测试,并查看它们在升级后是否仍然通过。我个人不会升级 Spree,除非我需要在软件中提供新功能,并且通常可以根据即将推出的功能进行预测。对于我的一个客户,我们使用旧版本只是为了在多个商店中保持相同的代码库。
标签: ruby-on-rails spree