首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >封装与数据库性能

封装与数据库性能
EN

Stack Overflow用户
提问于 2013-06-30 06:42:23
回答 1查看 145关注 0票数 3

我正在寻找关于如何在将对象集合持久化到数据库时如何使用封装的最佳实践建议。

例如,您需要持久化具有产品集合的分销商。如果您保持封装,并且不会弄乱与distributor类中产品表相关的数据库内容,那么您需要对数据库进行过多的访问,以便在循环中保存每个产品。代码将如下所示:

代码语言:javascript
复制
class Distributor {
  private $products;
  function save() {
    foreach ($products as $prod) {
      // 10000 products = 10000 hits to the DB! Instead of only one!
      $prod->save();
    }
  }
}

另一方面,如果您希望优化查询并执行多行插入/插入更新,则可以执行更复杂的操作,例如:

代码语言:javascript
复制
class Distributor {
  private $products;
  $query = $dao->getInsertUpdateQueryInstance();
  foreach ($products as $prod) {
    // Much extra code for implementing such an encapsulation.
    $query->addRow($prod->getRow());
  }
  $query->execute();
}

这意味着您需要编写具有特定函数的DAO层,如addRow()。

我看到的第三种可能性是在Product类中创建一个静态数组,但这打破了关注点的逻辑分离。现在,产品列表被保存在相同的Product类中,而不是与其分销商相关。

代码语言:javascript
复制
class Distributor {
  // I'm a distributor and I have nothing to do...
}
class Product {
  private static $products;
  function save() {
    foreach (self::products as $prod) {
      // add row
    }
    // persist 10000 rows
  }
}

封装,但太难看了!如果您有多个分销商,该怎么办?所有产品都将保留在同一阵列中吗?

有没有什么不太复杂的方法可以做到这一点?ORM是唯一的出路吗?

EN

回答 1

Stack Overflow用户

发布于 2013-07-10 04:39:58

为您的分发服务器编写特定的DAO没有任何问题。第二个解决方案很好,而第三个解决方案不应该被考虑。静电是不好的。

干杯

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17385367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档