Aplicação em Camadas com PHP: Uma Abordagem Estruturada para Organizar Projetos Web, Incorporando os Princípios da Clean Architecture.

DEXS
6 min readJan 22, 2024

Por que utilizar o PHP neste exemplo a ser seguido pelos leitores?

A linguagem destaca-se no cenário do desenvolvimento web por várias razões. Fácil aprendizado e comunidades ativas proporcionam um contexto propício para desenvolvedores, com amplo suporte online e recursos educativos.

Orientação a objetos no PHP oferece flexibilidade e modularidade, permitindo a criação de código reutilizável e de fácil manutenção.

A compatibilidade com diversos sistemas de gerenciamento de banco de dados (SGBDs), como MySQL e PostgreSQL, confere ao PHP uma versatilidade única. Essa característica, aliada à arquitetura de baixo acoplamento, facilita a troca do provedor de serviços de dados, adaptando-se às necessidades específicas do projeto.

A acessibilidade do PHP se estende à ampla disponibilidade de hospedagem, especialmente em ambientes baseados em servidores Linux. Essa escolha frequentemente resulta em custos mais baixos e uma integração mais econômica.

Qual objetivo promover criando uma relação entre o desenvolvimento em camadas e arquitetura limpa?

Clareza, modularidade e manutenibilidade no design do Projeto. Embora essas abordagens arquiteturais possam diferir em alguns aspectos, compartilham princípios fundamentais. Vejamos alguns:

1. Separação de responsabilidades:

Ambas abordagens destacam a importância da separação de responsabilidades para evitar o alto acoplamento entre os diferentes componentes de uma aplicação.

Acoplamento indica quanto um componente depende de outro para funcionar. Quando baixo, a aplicação fica mais flexível, reutilizável e mais organizada.

Embora este exemplo faça uso de alguns frameworks e bibliotecas para proporcionar uma maior didática durante o aprendizado, é recomendável realizar um esforço adicional para criar novos projetos que sejam menos dependentes. Isso se deve ao fato de que as camadas internas da aplicação devem ser agnósticas em relação às tecnologias de terceiros, facilitando a substituição ou atualização de componentes sem afetar a estrutura global.

2. Legibilidade e manutenibilidade:

Tanto o desenvolvimento em camadas quanto a Clean Architecture priorizam a legibilidade e a manutenibilidade do código. A divisão clara de responsabilidades e a minimização de dependências desnecessárias contribuem para um código mais compreensível e facilmente adaptável ao longo do tempo.

3. Testabilidade:

Ao separar as camadas, é possível testar unidades isoladamente, facilitando a identificação e correção de problemas. A Clean Architecture, em particular, enfatiza a importância dos testes na fronteira das camadas, garantindo que as regras de negócios sejam validadas de maneira eficaz.

Se houve entendimento dos porquês, então podemos avançar! Let’s go.

Vamos ao ambiente Windows. Caso ainda não os tenha instalados, faça o download a partir das seguintes URL’s abaixo:

1. Xampp
Pacote que fornece um ambiente de desenvolvimento local para facilitar a criação e testes de aplicações web. Está disponível para diferentes plataformas e inclui Apache, MySQL e PHP.

https://www.apachefriends.org/pt_br/index.html

Instalação

  1. Baixe o instalador e execute-o para iniciar o processo de instalação. Recomenda-se evitar instalar o XAMPP em diretórios com restrições de permissões, como (C:\Program Files), se possível, para evitar problemas relacionados ao Controle de Conta de Usuário (UAC).
  2. Ao receber as boas-vindas, clique em “Next”. Certifique-se de que todos os componentes estejam selecionados na tela seguinte de seleção dos mesmos.
  3. Em seguida, escolha um diretório de instalação e prossiga com a instalação. Aguarde até a conclusão, e na tela final, opte por iniciar o Painel de Controle clicando em “Do you want to start the Control Panel now?”.
  4. Após a abertura do Painel de Controle, clique em cada botão “Start” dos serviços Apache e MySQL. Este procedimento é necessário para garantir o funcionamento adequado do ambiente XAMPP.

2. Visual Studio Code
Ambiente de desenvolvimento integrado (IDE) gratuito e de código aberto. Oferece suporte a diversas linguagens e permite integração com controle de versão. Permite instalar extensões para maior suporte e possui terminal e depuração integrados.

https://code.visualstudio.com/download

Instalação

  1. Baixe o instalador do Visual Studio Code e execute-o.
  2. Siga as instruções na tela durante o processo de instalação.
  3. Não se esqueça de marcar a opção “Add to Path” para adicionar o Visual Studio Code às variáveis de ambiente do sistema.

Composer
Ferramenta de gerenciamento de dependências para PHP. Usado para simplificar o processo de gerenciamento e instalação de bibliotecas e pacotes em um projeto.

https://getcomposer.org/download

Instalação

  1. Baixe o instalador do Composer e execute-o.
  2. Clique em “Next” para prosseguir ignorando o modo desenvolvedor, “Developer mode”.
  3. Em seguida, você será solicitado a fornecer o caminho para o executável do PHP. Por padrão, ele pode ser encontrado em (C:\xampp\php\php.exe), caso você não tenha alterado o diretório padrão durante a instalação do Xampp.
  4. Para finalizar, abra um novo prompt de comando (cmd) e digite o seguinte: “composer”. Isso deverá exibir a versão do Composer instalada.

Organizando o projeto: Criando diretórios e subdiretórios.

  1. Crie um diretório com o nome do projeto:
  • Abra o File Explorer e navegue até (C:\xampp\htdocs).
  • Crie um diretório com o nome do projeto, por exemplo, “php-clean-architecture”.
  1. Inicie o Visual Studio Code em seu ambiente e abra o diretório do projeto:
  • Clique em “File” e, em seguida, em “Open Folder”.
  • Selecione o diretório criado no passo 1 “php-clean-architecture” e clique em “Open”.
  1. No Visual Studio Code, dentro do diretório do projeto, crie os seguintes diretórios e subdiretórios conforme necessário, seguindo a estrutura desejada para a Arquitetura Limpa. Por exemplo:

Application
⭢ Interfaces
⭢ Managers
Domain
⭢ Entities
Infra
⭢ Data
ㅤ⭢ Context
ㅤ⭢ Interfaces
ㅤ⭢ Repositories
⭢ IOC
WebUI
⭢ Controllers
⭢ Views

Application contém “Managers”, parte da camada Use Cases, e que definem casos de uso, representando as operações específicas que a aplicação pode realizar encapsulando a lógica de negócios, e “Interfaces”, que definem contratos para serviços externos, como repositórios e serviços de terceiros. Isso permite a injeção de dependências e facilita a substituição de implementações.

Domain contém “Entities”, que representam conceitos fundamentais do domínio de negócios. Elas encapsulam dados e comportamentos relacionados. Cada entidade pode ter uma correspondência direta com uma tabela do banco de dados. Por exemplo, se você tem uma entidade User no domínio da aplicação, pode haver uma tabela users no banco de dados que armazena as informações desses usuários.

Ambas camadas compõem o núcleo da Clean Architecture, e a direção da dependência flui do exterior para o interior. Em outras palavras, as camadas externas, a exemplo da camada Infrastructure (Infra), dependem do núcleo.

Infrastructure (Infra), contém “Data”, geralmente responsável por conter implementações concretas de classes que lidam com o acesso a dados e persistência, como repositórios, e “IoC”, que representa a Inversão de Dependência, princípio de design que visa inverter o controle do fluxo da aplicação promovendo flexibilidade, testabilidade e desacoplamento.

Observe que o diretório Data contém subdiretórios como “Context”, “Interfaces” e “Repositories”. É importante ressaltar que, ao realizar qualquer leitura externa, o diretório Data tem a responsabilidade de isolar a lógica relacionada ao acesso a dados. Essa separação garante que tal responsabilidade seja mantida distante do núcleo da aplicação. O subdiretório Context apresenta o contexto de conexão com o banco de dados, enquanto Interfaces, contratos para as operações de acesso. Por fim, em Repositories, encontramos implementações concretas com métodos para realizar operações como leitura, gravação e exclusão.

WebUI contém todas as interações relacionadas à interface do usuário. A representação inclui controladores, modelos de visualização (views) e outros elementos específicos de uma aplicação web. Este diretório atua como entrada para as solicitações web e serve como uma ponte para as camadas mais internas da aplicação.

Organizando o projeto: Instalando dependências.

Para facilitar o aprendizado, no Visual Studio Code, dentro do diretório do projeto, clique com o botão direito em uma área vazia e, em seguida, selecione “New File…”, renomeando como “composer.json”.

Você também pode optar por utilizar o Terminal clicando em “Terminal”, “New Terminal”, e prosseguir digitando e executando o comando “composer init”, assim como também instalar cada dependência separadamente através do comando “composer require php-di/php-di”, como exemplo.

Mas para este projeto, obtenha o modelo do composer a ser utilizado através da url https://github.com/giovanepessoa/php-clean-architecture-example/blob/main/Composer.json, em seguida, digite o seguinte comando para atualizar/instalar todas as dependências:

composer update

Após instalação, um diretório “vendor” será criado pelo Composer para armazenar todas as bibliotecas e dependências de terceiros relacionadas ao projeto. Cada pacote instalado terá seu próprio subdiretório.

O Composer configura automaticamente o autoloading das classes presentes nas dependências instaladas. Veremos em breve através da linha de código “require ‘vendor/autoload.php’”.

To be continued

Por Giovani Pessoa
https://www.linkedin.com/in/giovanipessoa

--

--

DEXS
0 Followers

Conectando ideias ao mundo digital