这是编辑/删除/更新其他对象中对象集合的最佳方法

时间:2012-08-10 03:09:50

标签: php oop symfony doctrine-orm object-oriented-database

在我的购物车对象中,我有产品集合

现在,当用户添加或删除产品时,我有两个选项

  1. 删除所有旧产品并坚持使用新产品
  2. 使用新产品集合进行迭代,看看是否已存在。如果没有那么删除该对象。如果不存在则添加
  3. 哪种方式更好

1 个答案:

答案 0 :(得分:2)

我将删除的方法是在接受ID的对象中构建一个函数(例如产品的型号或数据库ID),然后该函数通过它自己的项目运行如果找到匹配项将其删除。

对于添加新项目,具有再次接受项目ID的功能,并且使用该信息从数据库中获取所有适用的数据并将其附加到其自己的集合中。

如果您想要更改某些内容,您希望避免删除某个对象并重新创建该对象。尝试使用具有所有功能的对象来完成他们自己需要做的事情。

一些示例代码可能比上述代码更多:

class shoppingItem
{
    public $ID;
    public $name;
    public $price;
}

class shoppingCart
{
    public $items=array();
    public $totalValue;

    public function addItem($ID)
    {
        $this->items[]= new shoppingItem();
        // ... do database stuff to get item details
        $this->items[]->ID=$dataBaseRow['id'];
        $this->items[]->name=$dataBaseRow['name'];
        $this->items[]->price=$dataBaseRow['price'];
        $this->ammendTotal();
    }

    public function ammendTotal()
    {
        // loop all items and get total value.
        $var=myTotal;
        $this->totalValue=$var;
    }

    public function removeItem($ID)
    {
        for($i=0;$i<count($this->items);$i++)
        {
            if($this->items[$i]->ID==$ID)
            {
                // remove from array or update qty
            }
        }
        $this->ammendTotal();
    }
}

现在,要将商品添加到购物车,您需要做的就是这样:

$shoppingCart->addItem($someID);

对象会将其添加到自身,修改它的总数并继续。

要删除项目,同样的交易:

$shoppingCart->removeItem($unwantedItemID);

再次,项目已删除或数量已更新(但您选择这样做),并且它的总数再次更新。

基本上,保持低维护。永远不要让对象中包含不良数据(在这种情况下,例如totalValue与其中的项目总和不匹配),所以编写简单的函数并在可能的地方重复使用它们。

您从主代码中进行的调用应尽可能简单,并将所有繁重的工作留给对象。这样,您就不会遇到任何意外错误,您的主要代码很容易阅读/更改,您可以对这些对象充满信心。