非面向对象代码的模块化设计模式


Modular design patterns for non-object oriented code?

我正在寻找一篇或其他关于模块化设计形式的文章。不幸的是,在我失去这篇文章之前,我没有完全阅读它,所以这可能有点模糊,但我会尽可能具体地解释我想做什么,这样有人可能会建议其他文章。

有问题的文章(博客文章)是由一位程序员撰写的,他说,根据他的经验,设计软件的最佳方式是采用模块化或基于组件的方法,这样就可以为相同或类似软件的不同版本选择不同的组件。

我从中记得的主要内容是一张图表,显示了一个轴上的不同程序和另一个轴的不同组件,并显示了如何为特定程序选择特定组件。

我寻找这个的原因是我正在处理一些非面向对象的PHP代码,这些代码太大了,无法修改为面向对象。此程序显示不同品牌的web应用程序,每个网站具有不同但相似的规则。目前大部分代码看起来像:

if($_SESSION['country'] === "Canada" && $_SESSION['brand'] === "X" 
   && $_SESSION['type'] !== "1" || $_SESSION['brand'] !== "Y" 
   && $_SESSION['type'] === "2") {
      include("mod_something.php");
}

其中,条件可能会在代码中的几个位置重复,以包括不同的文件。

我想修改其中的一些,使其看起来更像:

if($_SESSION['component-red'] === true && $_SESSION['country'] === "Canada") {
    include("mod_something.php");
} 

并根据品牌和用户选择将组件变量设置在中心位置(网站使用前加载或FrontController设计模式)。

任何关于如何实现这一点的建议或提示都将不胜感激,但我不完全确定如何为非OOP代码研究这一点。

谢谢。

编辑:我受过面向对象的教育,但这不是我的问题。

我理解,花时间处理OOP可能对现有代码没有帮助。事实上,如果你不打算重写所有现有的代码,建议如下:

  1. 请确保网站只有一个入口点,如果没有-refract
  2. 将"模块"文件中的所有重复功能提取到单条目脚本中:它可以是全局资源的初始化、常见任务、请求筛选、布局初始化等
  3. 创建一些例程,根据应用程序状态和请求路由器来分支"模块":)基本上是switchif ... elseif ... else
  4. 试着让"模块"文件只执行业务逻辑并为模板赋值

根据现有源代码中的逻辑碎片,您可能需要拆分或合并一些模块。有一次,当客户的丑陋的电子商务网站需要修改时,我也做过类似的工作。最好是完全碎片化的代码。

我知道你想在没有OOP的情况下完成它,但你所描述的实际上是OOP。你们称它为"模块",我们称之为"对象",是一样的。

你应该做的是花一些时间学习OOP原理以及如何在PHP上实现它们。当这种情况发生时,您将开始看到使用对象和类的优势。