网站版本2,保持PHP或转移到.Net


Website version 2, keep in PHP or move to .Net?

我有一个用PHP 4构建的网站,我手工制作了一个框架。代码已经有3年的历史了,我受到了限制(需要付出很多努力才能做出更改)。

我决定做这个网站的新版本。从那以后,我的知识增加了,现在我知道有很多框架存在,IOCORM也存在。。。问题是,在我所有的研究中,我没有在PHP中找到完全让我满意的东西。另一方面,在我的工作中(主要是在.Net winform 2.0中),我看到许多好的IOC和其他解决方案是可能的,而且,我认为.Net在开发具有最佳实践的软件方面更成熟。

我还没有找到很多好的PHP IOC。至于ORM,我看过Propel,它看起来不错,但还没有找到一个完整的框架(Symfony文档不是最新的,包含很多错误;我认为Zend看起来太大了…)等等。

你是否建议我简单地尝试另一个框架并将网站保持在PHP中,或者切换到.Net是个好主意?

这个问题的原因

  • 该系统工作正常,但速度开始放缓(因为它有更多的用户)。数据库规范化过多。。。等等
  • 代码还不错——业务逻辑与HTML是分开的——但问题是控制器在视图中,所以越来越难进行一些布局更改
  • 没有进行单元测试;紧张的";做出改变
  • 系统中没有日志记录,很难获得快照来查看是否一切正常

更多信息(添加2008年11月3日)

  • 我知道.Net 2.0,这就是为什么我的替代方案是.Net而不是RoR
  • 我建议使用另一种语言,不是为了速度问题,而是为了可用的工具/框架
  • 它很慢,因为数据库规范化,太多的表在理论上很好,但在实践中不好(我们从错误中吸取了教训!)
  • 这是一种爱好,但我很认真,因为从一开始我就有超过25000名用户注册(并非全部活跃)

这里的人当前的建议

我想我会保留我所做的,并尝试慢慢地进行一些重构。令我惊讶的是,大多数投票都是为了保持目前的制度,但在短期内,这对我来说可能更简单。


感谢nickf拼写检查我所有文本的人。

如果您自己制作了整个框架,我建议您将其升级为PHP 5,然后继续前进。大多数PHP 4代码将在PHP 5中"正常工作";例外情况是使用新保留字的代码,以及依赖于PHP 4与PHP 5不同方式的代码——这意味着PHP 4功能边缘的类和引用中的一些东西。

如果这是一个业余项目,你对项目的当前状态感到有点不满意,我会说:一定要试试.net——出于同样的原因,我建议使用jsp或几乎任何其他可行的语言/平台/运行时:乐趣和体验。即使在一段时间后您决定恢复php,您也将保留如何完成工作的"新视角"。另一方面,很难放弃旧的代码和方法。完全重写很难,因为一开始你会丢失所有的错误修复、小调整和技巧——回到原点。通常你不会得到完全相同的结果。但是,如果你无论如何都要构建一个(改进的)2.0版本,并想扩展自己。。。继续吧,尝试一些新的东西。即使你失败了,至少你有一些东西可以在你的网站上写博客:)

edit:也可以只移植代码的一部分,或者在.net中开发新的模型——只要能够"承载"两个独立的代码库。你可能还想调查一下http://www.codeplex.com/Phalanger,php的.net编译器。(还没有尝试过。)

为了响应您的额外信息,从PHP 4迁移到PHP 5可能是重写框架以解决一些问题的黄金时机。

您也可以利用这个机会来增加图层间距。例如,你说它有一些放缓,可能与过度规范化有关。好吧,如果您的框架足够抽象数据访问,那么您应该能够向该层添加一些缓存(如memcached),并且应用程序不需要知道任何信息。

您也可以使用同样的努力以一种相当简单的方式添加日志记录。如果您使用对象层,您可以将日志记录添加到通用数据存储中,并且实际上可以免费获得大量日志记录。

其他速度减慢的原因可能是数据库索引不及时。这与你的框架无关。如果您使用的是MySQL,请打开慢速查询日志并在其中一些日志上运行EXPLAIN。您应该看到哪些列需要索引,而不是。

PHP本身并不是一种慢语言。缓慢将在其他地方。:-)

根据代码量的不同,留在PHP中可能是个好主意。如果你决定转到,这基本上就是一次彻底的重写。网因为你将使用一个完全不同的框架,使用一种完全不同的语言,在一个完全相同的开发范式下,你无法带来太多东西。

我强烈建议ASP。NET MVC与LINQ到SQL或LINQ到实体作为ORM。

对于一个好的PHP ORM,您应该看看Doctrine。它似乎更容易安装和编写,并且有更好的文档。编写查询的方式可能会让您想起LINQ。

ABout Zend框架,它很大,但并不真正相关;所有组件或多或少都是独立的。它更像是一个库,而不是像CakePHP或ROR:这样的单一框架

  • 你不喜欢Zend_Db,你可以使用ZF+原则
  • 如果你不喜欢Zend_Controller,你可以试试CodeIgniter+Doctrine+ZF

您可以在不使用ZF的MVC解决方案的情况下使用Zend_Openid。

您还可以在当前应用程序中开始使用Zend,而无需重写所有内容。

为什么要限制自己选择这些?为什么不试试RubyonRails呢?我有一个内置的ORM!

我只是试着慢慢地一节一节地更改为PHP5,试着慢慢跟上新框架,但不重建整个网站(如果它是一个大网站)。

对于您的数据库问题,您可能会从开发环境开始,在您知道数据库运行缓慢的地方对其进行去规范化。