Skip to content

003 — Roadmap ​

Queremos que o Yii 3:

  • Não limite o desenvolvedor na escolha da arquitetura. Permita qualquer coisa, do MVC "clássico" ao DDD.
  • Seja baseado em boas práticas como SOLID, GRASP etc. e as ensine à comunidade.
  • Mantenha a maior parte das coisas boas do Yii 2.
  • Seja mais aberto à comunidade e à infraestrutura PHP global.

Conformidade com PSRs ​

A conformidade com PSRs ajuda na personalização, permite usar bibliotecas PHP gerais e implementar menos wrappers. Aqui está a lista de PSRs que queremos implementar.

PSR-3 Logger ​

Implementado como um pacote separado que não depende de um framework.

PSR-4 Autoloading ​

  • O autoloading já está bom.
  • Documentar como funciona.

PSR-7 HTTP message ​

  • Remover nossa própria implementação. Pelo menos por enquanto.
  • Os pacotes do framework devem depender apenas de interfaces.

PSR-11 Container ​

Implementado como um pacote separado que não depende de um framework.

  • Os pacotes do framework não devem usar o container diretamente. Deve ser possível instanciar tudo manualmente.
  • Terminar a refatoração.
  • Remover do pacote todas as implementações específicas do framework. Movê-las para o framework.
  • Implementar fallback para o autoloader

PSR-12 Code style ​

  • Garantir que o código o siga.
  • Automatizar a correção de estilo antes do release.

PSR-14 Event dispatcher ​

PSR-15 HTTP handlers ​

  • Reescrever o fluxo HTTP para requisição-resposta PSR-7 + formatação da resposta via emitter.
  • Oferecer um emitter SAPI pronto para uso.
  • Possibilitar o uso de emitters alternativos, como o RoadRunner.
  • Suportar middleware.
  • Implementar filtros como middleware:
  • Reimplementar o router com suporte a middleware para grupos de rotas.
  • Filtros devem ser middlewares.

PSR-16 Simple cache ​

Implementado como um pacote separado que não depende de um framework.

  • Os pacotes do framework devem depender apenas de interfaces.
  • Separar os drivers em pacotes.
  • Limpar o código.

PSR-17 HTTP factories ​

  • Usar as factories PSR.

PSR-18 HTTP client ​

  • Remover nossa própria implementação. Pelo menos por enquanto.
  • Os pacotes do framework devem depender apenas de interfaces.

Tipos mais estritos ​

  • Garantir que type hints sejam usados em todo lugar.
  • Garantir que os tipos sejam o mais definidos possível. Evitar tipos variáveis sempre que possível.

Template de aplicação único ​

Router ​

Implementado como um pacote separado que não depende de um framework.

  • DSL para configuração.
  • Possibilidade de rotear para qualquer callable.
  • Rotas nomeadas.
  • Grupos de rotas com suporte a middleware.

Boas práticas e conformidade com SOLID em todas as classes/pacotes ​

  • Garantir que as interfaces sigam o princípio de "segregação de interfaces".
  • Não usar propriedades públicas.
  • Não usar init().
  • Não herdar de BaseObject ou Component. Removê-los.
  • Nada de globais.
  • Nada de chamadas estáticas, exceto helpers finais.
  • Preferir lançar exceções a corrigir a entrada.

Kit de ferramentas de desenvolvimento ​

  • Ferramenta de linha de comando para release
  • Ferramenta de linha de comando para desenvolvimento (cria symlinks dos pacotes em uma aplicação utilizável)

Console ​

  • Separar aplicação web e aplicação de console
  • Possivelmente eliminar a aplicação base (ainda é necessária)
  • Criar uma interface para o console (usando a do Symfony)
  • A implementação pode ser uma das populares (usando a do Symfony)
  • Garantir que a aplicação possa adicionar comandos via configuração

Documentação ​

  • Seguir boas práticas.
  • Não usar o termo "MVC".
  • Upgrade a partir do Yii 2.

RBAC ​

O RBAC é implementado como um pacote independente de framework.

  • Terminar a refatoração.
  • Garantir que siga boas práticas.
  • Separar os drivers em pacotes.

View ​

A view é implementada como pacote independente de framework.

  • Terminar a refatoração (veja as issues).
  • Portar os widgets.
  • Repensar e implementar os widgets de active form.
  • Implementar widgets de cache.

Abstrações de dados e grid ​

  • Terminar as abstrações de dados.
  • Portar a ordenação, usando abstrações de dados. Deve fazer parte do yii-dataview.
  • Portar a paginação, usando abstrações de dados. Deve fazer parte do yii-dataview.
  • Portar o grid, usando abstrações de dados. Deve fazer parte do yii-dataview.
  • Portar a lista, usando abstrações de dados. Deve fazer parte do yii-dataview.

Validadores ​

Debug toolbar ​

  • Portar a debug toolbar.

Gii ​

  • Portar o Gii.

Infraestrutura ​

  • Cobrir o config com testes.
  • Lançar uma versão estável do config.

Outros ​