Esta pergunta é tão antiga quanto a pergunta se a galinha ou ovo veio primeiro.

Então, salvar no banco de dados ou na sessão e por quê?

A resposta é simples. Banco.

Vamos dizer que você tenha uma classe para gerenciar o carrinho de compras e já tem um método para calcular o preço do pedido. Algo parecido como:

class Cart
{
    /**
     * @var float
     */
    private $totalPrice;

    /**
     * @return float
     */
    public function getTotalPrice()
    {
        return $this->totalPrice;
    }
}

Então, esta mesma classe podes usar no carrinho, para mostrar o histórico de compras, para apresentar a venda, para enviar o e-mail com o pedido, e aqui para gerenciar os itens quando o seu cliente esta comprando. Ao adicionar um item ao carrinho, podes simplesmente chamar o $cart->getTotalPrice() que já tens o preço total.

Só por isso Kraus?

Não... Imagina que seu cliente pede, após um mês sistema no ar (sim, acontece todo dia, e tens que estar sempre esperando por isso), um sistema de cupons de desconto e você precisa atualizar o carrinho. Então se você salva o carrinho sessão, tens dois locais para alterar. Se estas no banco, só a classe precisa ser alterado.

class Cart
{
    /**
     * @var float
     */
    private $totalPrice;

    /**
     * @var float
     */
    private $discountAmount;

    /**
     * @return float
     */
    public function getTotalPrice()
    {
        return $this->totalPrice - $this->discountAmount;
    }

    /**
     * @return float
     */
    public function getDiscountAmount()
    {
        return $this->discountAmount;
    }

    /**
     * @param float $discountAmount
     */
    public function setDiscountAmount( $discountAmount )
    {
        $this->discountAmount = $discountAmount;
    }
}

E...

A complexidade do seu código vai influenciar na quantidade de bugs que seu sistema tem. Então quanto menos códigos, menos bugs.

E não se esqueça que sites mais rápidos criar usuários felizes, e sites mais rápidos aumenta as chances da venda ser concretizada e a hospedagem é um dos fatores também.

4 comentários

Deixe uma resposta

  1. Simples, quando não tiver muito processamento: salva no localStorage o conjunto das id's, quando o cliente clicar em comprar, passa um objeto JSON para uma procedure no banco efetuar o loop adicionando o pedido.

    Se tiver processamento, opte por gravar no banco pelo menos a abertura do pedido. Pois se o cliente não finalizar você pode mandar mensagen's avisando que tem um pedido aberto.

     
  2. Eu salvo no Cookie, acho mais rápido.

     
  3. Também salvo tudo no banco.

     
  4. Só por vários lugares para alterar?