Criando e mantendo projetos PHP do jeito certo
/me
William Correa
@wilcorrea
# Primeiros Passos
- Projeto
- Arquitetura
- Estrutura
- Padrão de Projeto
- Componente
- Pacote
- Framework
- Engenharia
# Projeto
A palavra projeto vem da palavra latina projectum do verbo em latim proicere, "antes de uma ação", que por sua vez vem de pró-, que denota precedência, algo que vem antes de qualquer outra coisa no tempo (em paralelo com o grego πρό) e iacere, "fazer". Portanto, a palavra "projeto", na verdade, significava originalmente "antes de uma ação"
wikipedia
# Projeto
# Padrão de Projeto
Um Padrão de projeto (português brasileiro) (do inglês design pattern) é uma solução geral para um problema que ocorre com frequência dentro de um determinado contexto no projeto de software. Um padrão de projeto é uma descrição ou modelo (template) de como resolver um problema que pode ser usado em muitas situações diferentes.
wikipedia
# Padrão de Projeto
# Arquitetura
A arquitetura de software de um sistema consiste na definição dos componentes de software, suas propriedades externas, e seus relacionamentos com outros softwares
wikipedia
# Arquitetura
# Componente
Componente de software é o termo utilizado para descrever o elemento de software que encapsula uma série de funcionalidades. Um componente é uma unidade independente, que pode ser utilizado com outros componentes para formar um sistema mais complexo.
wikipedia
# Componente
# Pacote
Um pacote de software ou arquivo de pacote é um software empacotado num formato de arquivo que permite que aplicativos ou bibliotecas sejam distribuídos através de um sistema de gerenciamento de pacotes. O objetivo do empacotamento é permitir, de modo automático instalar, atualizar, configurar e remover programas de computador para o Sistema Operacional.
wikipedia
# Pacote
# Framework
Framework é um termo inglês que, em sua tradução direta, significa estrutura. De maneira geral, essa estrutura é feita para resolver um problema específico. Um framework em desenvolvimento de software, é uma abstração que une códigos comuns entre vários projetos de software provendo uma funcionalidade genérica.
wikipedia
# Framework
# Tudo junto e misturado
# Noções Práticas
- Padrões de implementação
- Iniciar um projeto
- Manter um projeto
- Utilizando um framework
- Tratamento de erros
- Fluxos de trabalho
- Testes automatizados
# Padrões de implementação
- Seguir algum padrão de escrita de código (coding style)
- PHP Standards Recommendations (PSR-1, PSR-2, PSR-12)
- Linter, Inspector, Fixer, Static Analysis
- PHP_CodeSniffer
- PHP Mess Detector
- PHPStan
# Padrões de implementação
# Iniciar um projeto
- Tomar decisões sobre o que será usado no projeto
- Analisar prazos e orçamentos disponíveis
- Fechar escopo e alinhar expectativas
# Iniciar um projeto
# Manter um projeto
- Compreender o ciclo de vida do projeto
- Organizar um fluxo de trabalho
- Revisar a camada de acesso à dados
# Manter um projeto
# Manter um projeto
# Manter um projeto
# Utilizando um framework
O papel de um framework é estabelecer estruturas básicas e componentes para iniciar um projeto
- Compreender o fluxo de trabalho
- Manter-se atualizado
- Comunidade em torno
- Aprender a linguagem base
# Tratamento de erros
- Error tracking
- Crash reporting
- Transações
- Apresentação apropriada de erros
- Explorar melhor o poder do try / catch
# Tratamento de erros
# Tratamento de erros
# Fluxos de trabalho
- Commits semânticos
- Code review
- Organizar comandos
- Documentar tomadas de decisão
- CI / CD com analisadores de qualidade
# Fluxos de trabalho
# Fluxos de trabalho
# Testes automatizados
- Unit (testes unitários)
- TDD (desenvolvimento orientado a testes)
- BDD (desenvolvimento orientado a comportamentos
- Usar os testes para garantir evoluções / refatorações
# Testes automatizados
# Recursos Práticos
- Integridade de uma regra de negócio
- Secar a lógica dos controllers
- Explorar recursos da linguagem
- Princípios de programação
# Integridade de uma regra de negócio
- Garantir as regras de negócio com a modelagem
- Isolar o que é o seu código do que é o de terceiros
- Explorar recursos da linguagem
# Integridade de uma regra de negócio
# Secar a lógica dos controllers
- Métodos grandes são indício de excesso de responsabilidade exagerada
- Priorizar apenas a captura de dados de HTTP
- Utilizar serviços e casos de uso para manter a lógica
# Secar a lógica dos controllers
# Explorar recursos de linguagem
- Orientação a objeto
- final
- abstract
- public, protected, private
- trait
- enum
- Controles de fluxo
- continue
- break
# Explorar recursos de linguagem
- Sintaxes simplificadas
- null coalesce
- null safe
- match
# Princípios de programação
- SOLID (single-responsibility, open–closed, Liskov substitution, interface segregation, dependency inversion)
- DRY (don't repeat yourself)
- KISS (keep it simple)
- YAGNI (you aren't gonna need it)
- SoC (separation of concerns)
- Object Calisthenics
- Lei de Demeter
# Links
- Packagist (https://packagist.org)
- PHP Standards Recommendations (https://www.php-fig.org/psr)
- PHP_CodeSniffer (https://github.com/squizlabs/PHP_CodeSniffer)
- PHP Mess Detector (https://phpmd.org)
- PHPStan (https://phpstan.org)
# Links
- Symfony
- (https://symfony.com/doc/current/index.html)
- Laravel
- (https://laravel.com/docs#your-first-laravel-project)
- Yii
- (https://www.yiiframework.com/doc/guide/2.0/pt-br/start-installation)
# Links
- Domain-Driven Design: Refatorando a arquitetura de aplicações
- (https://www.devmedia.com.br/domain-driven-design-refatorando-a-arquitetura-de-aplicacoes/34419)
hora das palmas
Organizando projetos com PHP
By William Correa
Organizando projetos com PHP
O Objetivo desse material é esclarecer detalhes tudo que cerca a Arquitetura e Engenharia de Software e mostrar cenários reais com o PHP
- 835