我的任务是支持和维护几个似乎违反所有已知编码标准的 PHP/MySQL Web 应用程序(我使用术语“应用程序”)。
PHP 代码包含例程、过程、业务逻辑,甚至查询——都在代码中。没有面向对象的编程,甚至没有 MVC,当然也没有表示层与应用层的分离。也没有使用框架来构建这些应用程序,我正在将 Yii 框架用于新项目。
尽管我应该重写这些应用程序很耗时吗?我每周至少有一半的时间涉及修复它们,在我的新工作中进行更新必须使用这些现有的应用程序。
有人对此有什么建议吗?
我的任务是支持和维护几个似乎违反所有已知编码标准的 PHP/MySQL Web 应用程序(我使用术语“应用程序”)。
PHP 代码包含例程、过程、业务逻辑,甚至查询——都在代码中。没有面向对象的编程,甚至没有 MVC,当然也没有表示层与应用层的分离。也没有使用框架来构建这些应用程序,我正在将 Yii 框架用于新项目。
尽管我应该重写这些应用程序很耗时吗?我每周至少有一半的时间涉及修复它们,在我的新工作中进行更新必须使用这些现有的应用程序。
有人对此有什么建议吗?
一个古老的问题,被问了很多。
基本上,如果它正在工作,请不要破坏它。如果您在其中工作,并且可以在不破坏代码的情况下进行更改以清理代码,那么请执行此操作。重写代码?我的想法是,投资回报率是多少,需要多少时间,您能否在不引入新版本的情况下避开旧版本的错误。像这样的东西。
祝你的项目好运,希望这会有所帮助。
我会警告不要全面重写。如果应用程序正在运行并且有用户,那么前进的道路是修改现有的代码库。
是的,您可以将框架实现到现有的无框架代码库中。这需要付出很多努力,但这是可能的(我已经做过几次了)。重新开始会让你失去宝贵的时间。这已经一次又一次地被证明(还记得网景吗?)
您显然足够聪明,知道存在问题,并且知道解决方案是通过实现框架并清理它们来改进应用程序。这让你领先于游戏。
分阶段实施新框架。从 MVC 框架开始 - 将其放入代码库,但不要担心还没有层分离这一事实。获得一个建立在 MVC 框架之上但不真正遵守 MVC 约定的新版本。这是一个开始。然后进行下一步——将业务逻辑移动到模型层。或者可能保持原样,但使其成为 OO。
请记住,您的工作是生产用户可以使用的产品。你的工作不是坚持最佳实践。含义 - 是的,最佳实践是正确的行动方案。但是,如果用户不能使用你的应用或者你的应用不能与竞争对手竞争,他们就无所谓了。不要忽视这一点。努力改进应用程序,以便将其变成出色的产品,但不要让完美成为优秀的敌人。
根据我的经验,这通常是一个商业决策。你的老板知道你花了多少时间维护这些系统吗?有多少用户实际使用这些系统?他们对企业有多重要?你能在重写时出售管理,你能证明它是有用的和有益的吗?
您可以在日常维护中开始一些基本的重构。每当您需要进行更新时,即使可能需要一些额外的时间,也要找到一种方法来使用某种 OOP 解决方案,或者清理那里的代码以使其更易于处理。全面重写通常不是一个好主意,而且很难推销,但如果您已经在维护和添加新功能,那么您没有理由不能使用新代码或修复来改进已经存在的内容。
产品会长期使用吗?其他用户会看到代码并认为是你做的吗?如果这些都是,那么您不妨重写代码。尝试从您的公司获得一些支持,让他们知道好处,也许您甚至会因此而受到关注。
虽然表示层和业务层之间没有分离显然很糟糕,但其他选择也有一些优点。如果维护代码很痛苦,请随时重构代码。由于您熟悉良好的设计模式,您应该能够相当容易地做到这一点。此外,这还将帮助您减少代码中的错误。但是请记住,在重构代码时,事情会在变得更好之前变得更糟。所以,不要太早放弃。
我建议这取决于用户在这些应用程序上的负载量,它们是否真的在实时场景中崩溃,以及你每天在这些修复上浪费多少时间等等。
重写总是比在完全混乱的东西上崩溃要好。