建筑:多个网站。一个代码库。自定义代码

问题描述:

好的。我目前正在构建一个php应用程序(平台),它将被部署多次,只有不同的配置。该应用程序由后端和前端组成。通过后端,我们可以配置哪些模块处于活动状态,哪些设置以及平台的外观如何。建筑:多个网站。一个代码库。自定义代码

我们预计客户将开始在他们的平台上要求特定的功能。这意味着平台会与其他平台不同。但是,我们维护一个代码库。

解决此问题的最佳方法是什么?由于我们不断修复错误并开发新功能,所以应该很轻松地处理所有平台。我们有一个脚本,用于将我们的平台更新部署到我们的所有平台。

我们是否应该将所有功能转换为插件,以便每个平台都可以手动更新(如果他们想要的话)?因此,如果客户想要与原始插件不同的东西,我们复制插件并创建他们自己的客户插件?但是,如果我们决定更新插件,代码是否容易维护呢?

或者我们应该在每个客户的代码中写入例外吗?

我们是否应该有单独的文件覆盖每个平台的基本文件和自定义代码?

什么是最好的方式去?

大伎俩将平衡客户的分歧需求,而不会结束一个无法维护的大规模复杂系统。下面的几个方法,你应该考虑:

  • 依赖倒置:有材料很多在这个问题上,基本上使内不同部分依赖于概念是构建一个系统的方式,而不是具体的实现。这将允许您将这些实现交换给不同的客户。它可以用于从深层业务逻辑和算法到数据提供者到UI小部件的所有事情。我不确定最好的地方是从哪里开始(我来自.Net背景而不是PHP),所以here's the Wikipedia entry作为一个开始。
  • 确定用户想要更改的事物种类,并将这些事物分离成可以使用DI或其他实用方法轻松交换的事物。已经这样做了非常努力,没有变化引入框架的代码基(核心,基本上“主机”的可交换位。
  • 保持依赖关系树尽可能的干净。
  • 开始用的PoC /原型。构建框架非常困难,您的第一次尝试可能会正常工作,但您的第二次和第三次尝试会更好;经验值得很多
  • 花费一些精力使系统易于在开发和部署后进行测试。所有运动部件都需要良好的诊断功能,以帮助您隔离问题并帮助进行集成。

编辑:最后,如果您还没有意识到它们,那么您可能可以使用现有的PHP框架,或者简单地借用方法 - PHP开源社区相当强大。查看Zend框架。