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