我们的应用程序是一个大型的 Javascript 应用程序,使用 Javascript MVC 框架。我们通过 SVN:external 在所有站点中使用 MVC 应用程序文件夹,每个站点也有自己的文件。设置文件特定于站点。
我们要求系统能够为每个站点提供不同的功能。核心功能应该保持不变。我们需要扩展核心代码,同时为当前和新开发人员提供可维护的解决方案。
目前我们想到的方案有:
a:在核心中嵌入功能条件并通过设置文件打开/关闭功能
b:覆盖/继承现有控制器
c:在核心内实现一个具有无限钩子的模块化系统(插件),并通过 settings.json 配置加载/启用哪些插件
选项 a 存在难以长期维护的问题,并且相当 hacky。
选项 b 已经实现,但很难维护(好像我们有一个新功能,如果每个站点的文件被覆盖,我们必须编辑它
选项 c 是我们最近考虑尝试和解耦修复的解决方案(通过使用共享(插件)控制器并编辑特定于站点的设置文件。
最好知道是否有人对我们已经想到的任何选项有任何经验,以及是否有人知道另一个更合适的选项。