Oi pessoal,
Criei uma série de 3 videoaulas, ensinando a como criar um carrinho de compra utilizando PHP Orientado a Objetos. Iremos ver conceitos de MVC, utilizar interface, criar entidades e repositórios e utilizar injeção de dependência.
Nessa primeira parte, criaremos nossa estrutura em MVC, utilizaremos o namespace, criaremos a inclusão de nossas classes utilizando spl_autoload_register e iremos separar responsabilidades para um melhor aproveitamento do nosso projeto.
Para um melhor aproveitamento da vídeo aula, iremos adicionar algumas informações que foram utilizadas na aula.
Apesar de não ser o foco da vídeo aula, utilizamos MVC (Model, View e Controller). Ele é um padrão de arquitetura de software, onde separa sua aplicação em camadas, onde o Model é a regra de negócios e representação dos dados, a View é a saída da informação e interação com usuário e o Controller é que recebe a entrada e repassa as informações chamando o Model ou a View.
E com isso podemos ter separações de responsabilidade e reutilização do código.
Para evitarmos trabalhar com inclusão dos arquivos individuais, foi utilizado com autoload da SPL, que é spl_autoload_register. Toda vez que vamos instanciar uma classe, é passada para essa função e a informação passada é convertida em caminho até o arquivo, realizando assim essa inclusão.
Em todo nosso projeto foi adotado as namespace’s, que são formas de agrupar itens. Utilizamos pastas para realizar a separação das nossas classes de forma segmentada. E utilizaremos os mesmos nomes em vários arquivos. Com isso, existia o colisão de nomes, ocasionando conflitos.
Antes da namespace, era utilizado o underline no nome das classes para separar as pastas até chegar ao arquivo
Veja o exemplo:
<?php class App_Model_Product_ProductRepositoryPDO{ }
Ao chamar o autoload, era trocado o underline pela barra e assim incluído com arquivo.
Isso garantia classes com nomes únicos, evitando a colisão. E com a utilização do namespace, não precisaremos utilizar esse artificio. Na hora de chamar as classes pra trabalharmos, simplificaremos também, evitando assim esses nomes gigantes que eram criados.
Exemplo utilizando Namespace:
<?php namespace App\Model\Product; class ProductRepositoryPDO{ }
Arquivos do Projeto:
https://github.com/davidchc/videoula-criando-carrinho-de-comprar-php