Esta é uma estrutura para o desenvolvimento de equipes de pequeno e médio porte
Um blog pessoal simples bybzmt/blog.php
Blog pessoal bybzmt/blog.php baseado nessa estrutura tem desempenho muito poderoso
| modelo | Arquivos estáticos | Home (2 blogs) | Home (10 blogs) |
|---|---|---|---|
| FPM | 4705 | 1507 | 1237 |
| Swoole | 26607 | 3276 | 2084 |
├── assets 资源目录(如:字体文件等)
├── config
│ ├── dev 开发环境配置
│ ├── product 生产环境配置
├── index.php 项目入口
├── library 其它与composer不兼容的库
├── src
│ ├── Admin 管理后台
│ ├── Api app接口端
│ ├── Backend 内部(内网)接口
│ ├── Common 公共代码目录
│ ├── Console 控制台
│ ├── Wap 手机Web端
│ └── Web Web端
├── static
│ ├── admin 后台静态文件
│ └── web Web端静态文件
├── tests 单元测试目录
├── var 可读写目录(如:模板缓存等)
└── vendor composer库
Como o Swoole é um modo de memória residente, o ciclo de vida das variáveis globais é no nível do aplicativo e, diferentemente do modo FPM, é apenas o nível de solicitação. As variáveis globais podem ser mantidas entre diferentes solicitações; portanto, os métodos originais, como $ _Get e $ _Post, não podem ser usados. Essa estrutura instancia um objeto de contexto para cada solicitação e armazena todos os dados relacionados à solicitação atual no objeto de contexto.
O objeto de contexto também é responsável pelo carregamento de componentes e substituição de funções na hierarquia.
Como no blog acima:
Ao inicializar o componente, o objeto de contexto procurará primeiro o componente correspondente em seu espaço para nome. Se não for encontrado, o contexto pai será inicializado. Dessa forma, ele pode expandir e substituir facilmente os componentes necessários.
API:
Objeto de solicitação é um swoole_http_request que é usado diretamente
Objetos de resposta também usam diretamente Swoole_HTTP_RESPONHE
No modo FPM, a estrutura implementa uma camada de compatibilidade para manter a mesma API que em Swoole
A estrutura implementa todos os objetos relacionados aos objetos de contexto como componente, principalmente para fornecer funções de instanciação rápidas, e não requer transmissão repetida de objetos de contexto.
Além disso, o componente também possui alguns métodos convenientes para usar em qualquer componente.
O Railing não adota mapeamento aberto, mas usa o roteamento registrado, com a vantagem de ser relativamente limpo.
O projeto de roteamento está localizado em Bybzmt/Router.php
Se você não gosta, pode substituí -lo pela biblioteca que gosta e é muito fácil substituir os componentes da estrutura.
A estrutura recomenda o uso do padrão do modelo de domínio, usando: serviço, tabela, linha (domínio) estrutura
Deve -se notar que o trabalho de exibição de dados não deve ser gravado em serviço, tabela e linha. É apenas responsável por fornecer os dados mais básicos. Organizar a estrutura de dados correspondente de acordo com os requisitos de página e API deve ser implementada em controladores e visualizações.
O banco de dados é dividido na classe de tabela que fornece funções básicas e classe Tablesplit que fornece funções de tabela. Há também um traço de Tablerowcache que fornece função de armazenamento em cache. Qualquer tabela de usuário deve ser herdada da tabela ou da classe Tablesplit e, quando o cache é necessário, ela pode ser introduzida.
Observe que a tabela e o cache suportam apenas as operações get/get/insert/update/exclusão na classe da tabela. Ao usar o SQL para executar diretamente operações de dados, você precisa manter manualmente as funções de cache ou tabela relevantes.
A estrutura fornece um método de carregamento do Lazyrow. Ao instantar, ele registra apenas o ID e, em seguida, tenta carregar em lotes até que o atributo seja acessado.
A estrutura fornece algumas funções comuns e é conveniente para usar
Esse cache não tem nada a ver com o cache na tabela acima, refere -se ao cache mantido pelo usuário. Tente permitir que diferentes tipos de caches sejam gerenciados com diferentes classes para evitar conflitos -chave.
A estrutura não fornece funções de modelo e é recomendável fazer diretamente programas de modelos de terceiros existentes. (Por exemplo: Twig)
As funções da estrutura não querem se adaptar a todos os ambientes, eles só precisam estar disponíveis em 80% dos casos. Circunstâncias especiais podem ser tratadas especialmente em projetos específicos.
Não há muito código na estrutura; portanto, tente ler todo o código o máximo possível.