9

我有一个用 PHP 4 构建的网站,其中包含我手工制作的框架。该代码已有 3 年历史,而且我的能力有限(需要付出很多努力才能进行更改)。

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

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

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

这个问题的原因

  • 系统工作但已经开始变慢(因为它有更多的用户)。数据库标准化太多......等等。
  • 代码还不错 - 业务逻辑与 HTML 分离 - 但问题是控制器位于视图内部,因此进行一些布局更改变得越来越难。
  • 没有做过单元测试,做出改变非常“压力”。
  • 系统没有登录,很难获得快照以查看一切是否正常。

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

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

来自这里的人的当前建议

我想我会保留我所做的并尝试慢慢地进行一些重构。令我惊讶的是,大多数投票都是保留当前系统,但很好:P 这对我来说短期内可能更简单。


感谢 nickf,他对我的所有文字进行了拼写检查。

4

8 回答 8

15

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

于 2008-11-03T00:34:26.940 回答
3

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

编辑:也可以只移植部分代码或在 .net 中开发新功能 - 只要可以“承受”两个独立的代码库。您可能还想查看http://www.codeplex.com/Phalanger,这是一个用于 php 的 .net 编译器。(还没试过。)

于 2008-11-03T01:35:11.060 回答
2

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

您也可以利用这个机会来增加层分离。例如,您说它有一些减速,可能与过度标准化有关。好吧,如果您的框架足够抽象数据访问,您应该能够向该层添加一些缓存(例如 memcached),并且应用程序不需要知道任何内容。

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

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

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

于 2008-11-03T05:20:57.503 回答
1

根据代码量,留在 PHP 中可能是个好主意。如果您决定迁移到 .Net,这基本上是一次彻底的重写。因为您将使用完全不同的框架,使用完全不同的语言,在完全不同的开发范式下,所以没有太多东西可以随身携带。

于 2008-11-03T01:09:39.053 回答
1

我强烈建议使用 LINQ to SQL 或 LINQ to Entities 作为 ORM 的 ASP.NET MVC。

于 2008-11-03T02:05:48.393 回答
1

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

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

您可以使用Zend_Openid而不使用ZF的 MVC 解决方案。

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

于 2008-11-03T13:56:08.350 回答
0

你为什么要把自己限制在这些选择上?为什么不试试 Ruby on Rails?我有一个内置的 ORM!

于 2008-11-03T02:08:00.247 回答
0

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

对于您的数据库问题,您可能会从开发环境开始,以在您知道它很慢的地方对数据库进行非规范化。

于 2008-11-26T15:43:08.807 回答