【问题标题】:Best practices / info: Writing a PHP4 ORM最佳实践/信息:编写 PHP4 ORM
【发布时间】:2010-12-15 05:51:48
【问题描述】:

由于多种原因(基本上,所有这些都可以归结为错误的管理决策),我们无法切换到 PHP5,这意味着我们可能需要再支持 PHP4 几年。

由于我们的许多应用程序(与许多 Web 应用程序一样)都是美化的 CRUD 应用程序,并且因为我喜欢偶尔拿起家庭项目来浪费一些时间,所以我目前正在编写一个类似 ORM 的小型应用程序将用作大多数基本查询(插入、更新、替换、删除等)的包装器的类。由于它必须支持 PHP4,PDO 是不可能的,所以我将不得不回退到语言- 特定功能,例如mysql_query。因为我们使用了几个不同的系统,所以在各种版本(Interbase 版本 4 及更高版本、Firebird、MySQL)中,我的 ORM / Wrapper 类(不知道该怎么称呼它)势必会变大。

为了解决这个问题,我想到了两种可能的“解决方案”:

  • 编写一个大型类,在函数中使用 switch 语句,该语句基于定义所用语言/RDBMS 的 $database_system 变量
  • 为每个 RDBMS 编写一个基类,并编写一个派生类(可能每个版本,如果它们之间的功能差异很大)。

目前我倾向于第二种选择;在我看来,它使维护更容易,尤其是在将新的 RDBMS 添加到支持列表时。另一方面,每个 RDBMS 都使用它自己的一组 PHP 函数,我不确定从基类继承多少。请记住,此类最终将支持排队、执行(如果支持,还可能提交)整个查询列表等功能。

鉴于这种情况,哪种方法最好? A 或 B,或者可能有一个我还没有考虑过的 C?现有类的一些示例将是完美的,不幸的是,我遇到的大多数 ORM 都依赖于(仅限 PHP5)PDO 类。

【问题讨论】:

    标签: php orm oop php4


    【解决方案1】:

    绝对选择您的选项 2。您的 OO 方法优于大量 switch 语句。您的基类将给您提供的不仅仅是继承常用方法。它为您提供了一个一致的接口,以后可以在您迁移到其他一些数据库持久性策略时用作适配器(当管理变得有意义时是 PHP5/PDO?)。我什至会在 PDO 之后对您的接口进行密切建模,如果需要,PDO 甚至可以替代您的本地持久层。此外,如果项目中的新开发人员已经有 PDO 经验,那么他们学习持久层的学习曲线会更短。

    【讨论】:

      【解决方案2】:

      我无法理解使用绝对不受支持的软件作为新软件开发基础的管理决策。对于经理来说,至少并行安装 PHP 5 的成本几乎为零。 PHP 4 的唯一后果是更高的开发成本(PHP 5 的类比 PHP 4 的多,现在所有的工具都主要依赖于 PHP 5,PHP 4 的最后提醒消失了)并且使用 PHP 5 进行生产更便宜 - 你有为了自己修复 PHP 运行时中的错误,PHP 5.3 使用的系统资源要少得多,....)

      但如果您真的想这样做:Pear::MDB2 应该可以满足您的需求,并且与 PHP 4 兼容且非常稳定。

      但我宁愿换工作......这样的决定通常不是唯一愚蠢的决定。

      【讨论】:

      • 例如,我们有几个客户端在他们自己的服务器上运行我们的软件。他们希望他们的版本保持最新,但拒绝更新他们的服务器。签订合同时这是完全可以接受的。这是我提到的“错误决定”之一,所以它并不像我说的那么糟糕。但有时也很麻烦。虽然 MDB2 包看起来很可靠,但我一定会检查一下。谢谢!
      • 我对 PHP 5 尤其是 5.3 有强烈的意见,你应该尝试说服你的客户 :-)
      • 如果您并行启动更快/更好的 PHP5 版本,您可能会为顽固的客户提供更有说服力的案例。
      【解决方案3】:

      如果有人正在寻找类似的东西(我不希望如此)但如果 - 你应该看看 xPDO。

      它是 pdo 在 php4 上工作的替代方案。 从未尝试过使用它 - 但我认为它应该可以工作...... http://www.xpdo.org/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-03
        • 2016-05-19
        • 2016-11-28
        • 1970-01-01
        • 1970-01-01
        • 2021-08-05
        • 2012-11-11
        • 2011-01-27
        相关资源
        最近更新 更多