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

时间:2012-01-19 18:38:00

标签: php design-patterns modular

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

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

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

我正在寻找的原因是我正在处理一些非面向对象的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教育,但这不是我的问题。

2 个答案:

答案 0 :(得分:1)

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

  1. 确保网站只有一个入口点,如果不是 - 重构。
  2. 将“模块”文件中的所有重复功能提取到该单个条目脚本中:它可以是全局资源的初始化,常见任务,请求过滤,布局初始化等。
  3. 根据应用程序状态和请求创建一些分支“模块”的例程 - 路由器:)基本上是switchif ... elseif ... else
  4. 尝试保持“模块”文件仅执行业务逻辑并将值分配给模板。
  5. 根据现有源中的逻辑碎片,您可能需要拆分或合并某些模块。一旦我做了类似的工作,丑陋的电子商务网站的客户需要修改。完全碎片化的代码更好。

答案 1 :(得分:0)

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

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