我有一个现有的Rails应用程序,并且要求制作一个版本,这将需要不同的视图以及一些核心逻辑更改。该应用程序将仍然是80%+。我当时在想,我们将需要将该应用程序拆分为三个应用程序。核心逻辑和基于它的两个变体。
关于最佳路径的任何建议?正在考虑为后端创建一个gem,并将其包含到其他应用程序中。
答案 0 :(得分:8)
在我的一个项目中,我曾经经历过一次。要求是拥有大量通用的功能,功能和代码库,但又能够为特定客户端自定义和添加新功能。
我们朝着可以安装到不同客户端应用程序的核心Rails引擎的方向发展,然后我们根据客户端需求扩展/自定义它。
我建议您看看https://guides.rubyonrails.org/engines.html
在这里Rails引擎的工作方式。我可以向您保证,这个方向是轻松,简单,组织化,可扩展的(+70个具有相同核心引擎的不同客户/存储库),我们对此并不后悔。
答案 1 :(得分:1)
这取决于应用程序的大小及其用途。就像使用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