如何处理遗留怪物?

时间:2016-10-03 06:28:13

标签: php refactoring

我正在研究一个项目(我国的大型公司的CRM),这个项目大约有10年历史,而且代码完全混乱。让我指出一些主要问题:

  • 没有使用框架。据我所知,10年前有 一些CMS系统(已经是凌乱的代码)已经发展成为CRM。
  • 数十名开发人员已经参与了这个项目,因此你可以找到 3个与数据库的不同连接等异常。
  • 没有模型或DBAL的概念。一切都是直接完成的 PDO对象包含在一些巨大的类中的方法中。我认为我们项目的珠穆朗玛峰是16 000行代码。
  • 由于我们没有固定框架,因此每个逻辑都在“控制器”中 这只是clients.php文件,或者就像命名空间那样巨大的类。几天前我不得不做一个 决定花费至少10天试图理解 其中一个控制器内部的业务逻辑,所以我可以提取一个我需要的方法(因此如果我想保持DRY可能会破坏所有模块)或使用curl登录我的 应用程序,以编程方式调用文件并获利。想知道我有什么 选择的。
  • 锦上添花的结果是。上周五我发现在我们的一个“控制器”中,我们循环通过$_POST,并且在该循环的内部有一个eval。因此,您可以键入rm -rf /或从数据库中获取所有客户,基本上是您想要的所有客户。

当然没有任何测试。我只有一年的经验,但我认为扔掉更多废话是不合适的,因为它已经因为它而已。我非常了解主要的PHP框架是如何工作的,以及他们使用的一些模式。

我已经尝试实现一个基本的FrontController和路由,所以我可以放弃controller.php-pattern并创建一个基于类的天堂,但我感到困惑,天气为这段代码提供了额外的复杂性,不会让它变得更加混乱,导致突然有一半的事情会有不同的表现。

我想指出我并不抱怨。我的知识现在足以改进这个代码了,我是唯一关心的代码,所以我这就是为什么我在这里问这个问题以获得一些提示。

你能不能给我一些关于如何改进这段代码的提示?除了包装你的东西和离开公司之外,你会在这种情况下做些什么?

提前感谢您提供任何提示&技巧。

1 个答案:

答案 0 :(得分:1)

我认为最大的问题,或者第一个任务是列表,你可以用这件事做的事情!

想想这些东西,也许你只需要整个功能的50%,这是我做的每一个遗留重构的开始。

然后您需要一个概念,可能是最适合的ORM,或者是一个提供您需要的大部分功能的完整框架。

制作一些对象的草图,以及它们如何工作,并与其他人交流。

这是一个很棒的视频,帮助了我很多! https://www.youtube.com/watch?v=7v9ehGsPm1s

祝你好运!