在我的工作场所,我们正在计划对我们的核心产品进行重大重构,这是一个具有多个“模块”的 Web 应用程序。我引用了这一点,因为这是我们的主要关注点之一:模块并不是真正的模块,整个事情都是单片的。该应用程序是用 PHP 编写的,带有 smarty 模板,并使用 Pear 来访问 MySQL 数据库。我们并不真正关心数据库的独立性,尽管如果这不需要几个月的时间来实现就好了。
我们主要担心的是开发时间/成本呈指数级增长,因为在不相关的地方会出现错误,并且没有可靠的通用架构来依赖以获得最常见的功能(每个模块基本上都是从前一个模块复制/粘贴,然后适应)。
我对 web MVC 原理有一些经验,主要是在 ASP.NET MVC 方面。我喜欢它提供的清晰分离和可测试性。然而,当在本地机器上尝试这个时,应用程序比它应该的要慢很多。
好的,足够的介绍,关于问题: - 我应该依赖缓存模块吗?这是否消除了使用良好架构提供的大部分开销?APC之类的东西。
- 该应用程序主要是阅读。写入主要是单个值(更改记录上的单个字段)。任何擅长于此的 PHP 的 OR/M 吗?
- 也在寻找一个灵活的 MVC 框架。我知道 Zend、CakePHP,也许还有 Symfony?
棘手的部分是我们没有能力进行完全重写。我们将不得不逐步改进当前非常混乱的代码库。这必须在编写新代码或修复错误时完成。我真的非常喜欢能够做的一件事是在修复它之前为一个新错误编写一个回归测试,以防止它以后再次弹出(这种情况偶尔会发生)。
我目前正在考虑的堆栈包含:
- 选择的 MVC 框架
- 日志记录(log4php?)
- 选择的 OR/M(不必是动态的,代码生成也可以)
- 选择的 IoC 容器
- Smarty 模板,也许是抽象的,所以我们可以在需要时将其切换出来。
- 选择的操作码缓存(我们现在正在使用一个,忘记了哪个,必须询问系统管理员)
让我担心的主要一点是在 PHP 中创建干净的代码对性能的影响。看到它是一种与 .NET/Java Web 堆栈相反的解析语言,为其他内联代码创建抽象(在不同文件中强制分离)可能会在另一个层面上产生新问题。
注意:如果您想出更合适的标签,请重新标记,我不确定当前的标签。