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.
- Os pacotes do framework devem depender apenas da interface.
- Separar os drivers em pacotes.
- Limpar o código.
- Corrigir o destino de e-mail.
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
- Implementar como uma biblioteca separada.
- Usar em outros pacotes.
- Polir.
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
- Abandonar basic/advanced.
- Criar um template de aplicação único que funcione de imediato.
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
BaseObjectouComponent. 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
- Terminar o redesign do pacote principal
- Portar os validadores necessários
Debug toolbar
- Portar a debug toolbar.
Gii
- Portar o Gii.
Infraestrutura
Outros
- Decidir sobre os namespaces.
- Limpar o error handler. Garantir que o error handler capture erros fatais e use a resposta.
- Tornar os validadores independentes dos models para permitir reutilizá-los em handlers.
- Dividir a IdentityInterface.