【问题标题】:active record vs bare sql活动记录与裸 sql
【发布时间】:2011-02-11 23:17:06
【问题描述】:

如果没有充分的理由,我不接受概念有点自豪。但我对使用活动记录模式表示怀疑。目前我正在使用zend,但说代码Igniter有活动记录。

我不使用。因为

  • sql 是 sql,它有自己的语法。
  • 您可以复制到 sql 编辑器并且它可以工作(如果它工作!)
  • 你不会学习另一种语法
  • 如果活动记录按照您预期的方式编写 sql,则无需终止脚本即可收集

    但活动记录有

  • 你假装写得像客观的php。
  • 当您需要移动另一个db(oracle>mysql :p) 时,您不需要将rand 函数更改为random,活动记录可以为您完成。

    活动记录是否具有我所缺少的更多功能?您能否举一些活动记录可以挽救生命的示例?

  • 【问题讨论】:

      标签: php codeigniter orm activerecord


      【解决方案1】:

      ActiveRecord

      在数据库表或视图中包装一行、封装数据库访问并在该数据上添加域逻辑的对象。

      不是 CodeIgniter 使用的。 CI 的 AR 是 basic query object

      ActiveRecord 的主要优点是简单。如果您的应用程序主要进行简单的 CRUD 操作,并且您的 Table 结构与 ActiveRecord 非常匹配,那么它是一个不错的选择。在这种情况下,很容易抽象出 CRUD。而且您仍然可以向其中添加手工制作的 SQL,以进行某些更复杂的行操作。

      class User
      {
          protected static $dbAdapter;
          protected $username;
          …
      
          public static function findById($id)
          {
              $result = self::$dbAdapter->query(
                  sprintf('SELECT * FROM users WHERE id = %d', $id)
              );
              if($result) {
                  return new User($result);
              }
          }
      
          public function create()
          {
              try {
                  return self::$dbAdapter->query(
                      sprintf(
                          'INSERT into users …', 
                          $this->username, 
                          …
                      );
                  );
              } catch …
          }
      
          …
      }
      

      你会像这样在你的应用程序中使用它:

      $john = User::findById(123);
      echo $user->username; // John
      
      $jane = new User(array(
          'username' => 'Jane'
      ));
      $jane->create();
      

      如果您的行和 AR 不匹配,您肯定不想使用 ActiveRecord。 AR 是表示数据库行的对象。 AR 将对象设计与数据库设计相结合。 AR 不是 ORM。试图把它放进去是不切实际的。如果您发现自己需要更丰富的领域模型,您将不会满意,因为它最终会由于对象关系阻抗不匹配而阻碍您的开发。

      补充阅读:

      【讨论】:

        猜你喜欢
        • 2017-02-05
        • 1970-01-01
        • 2021-11-09
        • 1970-01-01
        • 1970-01-01
        • 2012-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多