我有一个现有的rails应用程序,并且需要制作一个需要不同视图和一些核心逻辑更改的版本。申请仍然是80%+相同。我在想我们需要将这个应用程序拆分出来,也许需要分成三个应用程序;核心逻辑和基于它的两个变体。
有关最佳路径的任何建议吗?正在考虑为后端创建一个gem并将其包含在其他应用程序中。
在我的一个项目中,我曾经经历过这次。要求是拥有一组很常见的功能和代码库,但能够为特定客户定制和添加新功能。
我们进入了一个可以安装到不同客户端应用程序的核心rails引擎的方向,然后我们根据客户需求扩展/定制它。
我建议你看看rails引擎是如何工作的:https://guides.rubyonrails.org/engines.html
我可以向您保证,这个方向无忧无虑,简单,有条理,可扩展(+70个不同的客户端/ repos使用相同的核心引擎),我们不会后悔这样做。
这取决于应用程序的大小和目的。就像API一样,您可以通过在路由和类中命名它们来对控制器和视图进行版本控制,并且可以继承V1类来创建V2类,从而覆盖需要更改的唯一内容。如果您需要转到旧版本或新版本,这些都在同一个应用程序中,这将特别有效。而不是
class UserController < ApplicationController
def show
...
end
def create
...
end
end
你有:
class V1::UserController < ApplicationController
def show
...
end
def create
...
end
end
class V2::UserController < V1::UserController
def create
# show didn't change between versions, so don't override it
# only change create here so that its specific to our v2 behavior
...
end
end