2

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

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

  1. 要么删除所有旧产品并坚持使用新产品
  2. 迭代新产品集合,看看是否已经存在。如果不存在,则删除该对象。如果没有,请添加它

哪种方式更好

4

1 回答 1

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 与其中的项目总和不匹配),因此编写简单的函数并在可能的情况下重复使用它们。

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

于 2012-08-10T03:14:56.937 回答