Blog do MX Cursos

Criando um carrinho de compras com PHP – Parte 2

Oi pessoal,

Nessa segunda parte de Como criar um carrinho de compra utilizando PHP Orientado a Objeto, iremos focar no Model, relacionado ao produto, resgatando as informações do banco de dados e passando esses registros para View.

O Model é uma das camadas do MVC onde é especificado a nossa regra de negócio. Ele pode ter outras camadas, como persistência, que é a forma de salvar e resgatar essa informações de algum tipo de armazenamento, as entidades, que seria representação de uma informação, entre outros.

No primeiro momento, criamos nossa entidade Product, que representa um produto.  Nessa entidade, fazemos verificações de quais valores são válidos. Quando não forem válidos, lançamos uma exceção com a classe InvalidArgumentException.

Depois definiremos o comportamento que queremos para criamos uma interface.

Na interface de Objetos, você define quais métodos você deseja que tenham as classes que implementam, definindo como fosse um contrato. Com isso você trabalha com o polimorfismo, onde só conhece uma estrutura, mas não sabe como é realizado a implementação.

Quando pensamos num contrato, estamos tendo um acordo de confiança. Sabemos que teremos garantias ao assiná-lo. E quando queremos que isso ocorra, uma das forma é utilizar a interface.

No nosso exemplo, definimos que fosse retornado todos os produtos e um produto, mas não é relevante a forma que fazemos isso, se é usando MySQL, MongoDB, ou arquivo de texto, em memória… Isso não importa mais! O importante que teremos esses métodos.

Nossos cursos indicados

Na implementação, utilizamos o PDO passando pelo construtor e fazendo a indução de tipo, trabalhando assim com a Injeção de dependência, evitando assim o acoplamento da nossa aplicação.

Vamos ver um exemplo de acoplamento:

<?php 

class ProductPDO{
    private $pdo;

   public function __construct(){
       $this->pdo = new \PDO("mysql:host=localhost;dbname=shop", "root", "");
   }
}

Veja que instanciamos o PDO dentro da nossa classe. Se precisamos modificar uma informação, precisamos alterar a classe, criando assim mais uma responsabilidade além  dos registros que queremos trabalhar.

Também está responsável por instância a conexão com banco de dados.

Para resolver isso, passaremos pelo construtor a instancia do PDO:

class ProductPDO{
    private $pdo;

   public function __construct($pdo){
       $this->pdo = $pdo;
   }
}

A nossa classe ProductPDO, não é mais responsável de instanciar o PDO, mas temos um outro problema: Como garantir que seja uma instancia do PDO?

Para isso usamos a indução de tipo:

class ProductPDO{
    private $pdo;

   public function __construct(\PDO $pdo){
       $this->pdo = $pdo;
   }
}

Agora sim garantimos que será uma instancia do PDO que será passada e nossa classe não será mais responsável de realizar a conexão com banco de dados usando o PDO.

Dessa forma diminuímos o acoplamento.

Espero que tenham gostado.

Um abraço e até a próxima!

Arquivos da Vídeo Aula

https://github.com/davidchc/videoula-criando-carrinho-de-comprar-php