OOP映射两个表 - 两个对象?或者一个比它更了解的对象?

时间:2017-05-17 22:40:37

标签: php oop aggregation

我有两个表,A和B.我的大部分数据来自表A,但我还需要验证某些信息(地址和电子邮件)与表B中的相同。我可以访问该信息查询,

select a.address, a.email, b.address, b.email from a, left join b on a.uniqueAttr=b.uniqueAttr

我正在尝试以OOP的方式做事,但我一直在努力弄清楚这在大计划中的位置,因为对象A真的不应该关心表B中的信息。

我的第一个想法是做这样的伪代码:

<?php
// list view
$a = new aList;
$rows = $a->findAll();
for($i=0; $i<sizeof($rows); $i++) {
    $b = new bList;
    $foreignRow = $b->find($row->foreignKey);

    // do something with the info
    if($foreignRow->address != $a->address) { $error = 'address'; }

    // do template stuff...
}

但如果我这样做,

  1. 每次迭代a生成的列表时,我都要在b中创建一个新查询。这不是很有效,特别是如果列表很长(虽然我打算实施分页)。
  2. 它仍然是程序式编程,因为我应该能够检查$someObject->isAddressSame()
  3. 我看到的另一个选择是

    1. 向objectA添加一个方法,该方法保留连接表B(如果没有匹配的记录)并返回包含表B属性的列表。
    2. 实现另一种检查地址是否相同的方法。
    3. 伪代码:

      <?php
      // list view
      $a = new aList;
      $rows = $a->findAllWithTableB();
      for($i=0; $i<sizeof($rows); $i++) {
        $error = $a->isAddressSame($row);
        // do other view stuff
      }
      

      但这似乎是在重复->findAll()方法)并且它有一个对象A知道它可能不应该知道的表B.

      我对于对象A知道多少太偏执了?

0 个答案:

没有答案