1

我正在寻找有关模块化设计形式的文章或其他文章。不幸的是,在我丢失它之前我没有完全阅读这篇文章,所以这可能有点模糊,但我会尽量具体并解释我正在尝试做的事情,以便有人可以推荐其他文章.

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

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

我正在寻找这个的原因是我正在处理一些非面向对象的 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 代码。

谢谢你。

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

4

2 回答 2

1

我明白,花时间在 OOP 上可能对现有代码没有帮助。实际上,如果您不打算重写所有现有代码,建议如下:

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

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

于 2012-01-19T19:32:13.920 回答
0

我知道您想在没有 OOP 的情况下完成它,但是您所描述的实际上是 OOP。您只需将其称为“模块”,我们将其称为“对象”,同样如此。

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

于 2012-01-19T18:54:15.800 回答