Sugestão de arquitetura para uso do micro framework Laravel Lumen.
Clique no link para acessar a documentação do Laravel Lumen.
Seguem os artefatos recomendados e suas responsabilidades:
- Estrutura de pastas
.
├── app
│ ├── Console
│ │ └── Commands
│ ├── Contracts ***
│ ├── Events
│ ├── Exceptions
│ ├── Filters ***
│ ├── Http
│ │ ├── Controllers
│ │ └── Middleware
│ ├── Jobs
│ ├── Listeners
│ ├── Providers
│ ├── Repositories ***
│ └── Services ***
├── bootstrap
├── database
│ ├── factories
│ ├── migrations
│ └── seeds
├── public
├── resources
│ └── views
├── routes
├── storage
│ ├── app
│ ├── framework
│ │ ├── cache
│ │ └── views
│ └── logs
└── tests
*** Diretórios não existentes na estrutura padrão, criados para separar as responsabilidades destes artefatos. Parto do princípio que os artefatos padrões do Laravel Lumen já são conhecidos, onde abaixo estarei explicando somente os novos artefatos.
-
Contracts: Neste diretório ficam todas as Interfaces da aplicação. O ideal é que injeção de dependência no service container aconteça usando essas interfaces/contratos pois caso seja implementada outra classe/serviço para fazer o proposto pela interface/contrato, obrigatoriamente deverão ser implementados os métodos já definidos não necessitando alterar toda a aplicação que usa aquela classe/serviço. Clique aqui para mais informações.
-
Filters: Neste diretório ficam os filtros e validadores. Filtros são usados para filtrar dados baseados em formatações como trim, inteiro, alphanumérico, etc. Validadores são usado para validar o tipo do dado. É possível criar suas próprias formatações e validações como CPF, CNPJ, etc. Aconselhável uso do módulo Zend Filter do Zend Framework e Validator do Laravel. Este artefato geralmente é usado na camada de controller, filtrando e validando a requisição antes de seguir para as próximas camadas.
-
Services: Neste diretório ficam os serviços de domínio responsáveis por processar regras de negócio da aplicação.
-
Repositories: Neste diretório ficam os repositórios para persistência de dados. Geralmente eles são de persistência em banco de dados porém podem persistir em outros locais como arquivos locais e/ou externos como nuvem, outras aplicações, etc. No caso do Eloquent ele funciona como uma camada de abstração do model. Para hydratação e mapeamento, aconselhável o uso do módulo Zend Hydrator do Zend Framework. Neste diretório também ficam as entidades e coleções do domínio. É aconselhável o uso de adaptadores para diminuir o acoplamento entre as dependências.
Pensando em forma de camadas, o fluxo simples de dados seria algo como:
[>> Request |-> Controller |-> Service |-> Repository \
<<] Response <-| Controller <-| Service <-| Repository /
É fortemente indicado o uso de injeção de dependência. No caso do Laravel Lumen é recomendado usar o Service Provider.
Para usar a cobertura de código(code coverage) com PHPUnit é necessário instalar o xDebug.
The Lumen framework is open-sourced software licensed under the MIT license.