Vídeo:
https://www.youtube.com/watch?v=GCfdj2MCOCo
Organizando seu
projeto em Laravel
do simples ao complexo
Apresentação
Trabalho na Leroy Merlin Brasil.
Co-organizer Meetup de Laravel em SP.
Co-organizer dos Hangouts do Laravel BR.
@guilhermeguitte
Organização
A sua arquitetura pode ser desde uma casa simples...
Até...
Existe um amplo espectro de como
Arquitetar
Em software é a mesma coisa...
Desde...
Até...
Mas,
antes de definir uma arquitetura...
Você
precisa
entender
CONTEXTO
Porque será sua responsabilidade na definição da arquitetura, garantir...
Qualidade Externa
Qualidade Interna
Uma decisão errada para um contexto pode acabar com seu projeto.
Duas startups...
Uma grande empresa...
CONCLUSÃO
Desenvolver o projeto de uma forma incremental, começando com uma arquitetura enxuta, aplicar testes automatizados e quebrar em mais camadas sob demanda.
''
Agora… Como organizar minha aplicação?
Abordagem progressiva
app
├── Console
├── Events
├── Exceptions
├── Http
│ ├── Controllers
│ ├── Middleware
│ ├── Requests
├── Jobs
├── Listeners
├── Models
├── Repositories
tests
├── Acceptance
├── Functional
├── TestCase.php
└── Unit
├── Controllers
├── Models
├── Repositories
Crie um folder chamado "Models"
O problema dessa organização
app
├── Models
│ ├── Cart.php
│ ├── Category.php
│ ├── Content.php
│ ├── Course.php
│ ├── ProductList.php
├── Repositories
│ ├── CartRepository.php
│ ├── CategoryRepository.php
│ ├── ContentRepository.php
│ ├── CourseRepository.php
│ ├── ProductListRepository.php
CONTEXTO
Separe em seu próprio contexto
// composer.json
{
…
"autoload": {
"psr-4": {
"App\\": "app/",
"MyDomain\\": "my-domain/"
}
}
…
}
Separe em seu próprio contexto
app
my-domain
├── Cart
│ ├── Cart.php
│ └── Repository.php
├── Category
│ ├── Category.php
│ └── Repository.php
├── Content
│ ├── Content.php
│ └── Repository.php
├── Course
│ ├── Course.php
│ └── Repository.php
├── ProductList
│ ├── ProductList.php
│ └── Repository.php
Seu
model
se
tornou
muito
grande!
Delegue mais!
app
my-domain
├── Cart
│ ├── Cart.php
│ ├── Validator.php
│ ├── Sanitizer.php
│ ├── SearchEngineIndex.php
│ └── Repository.php
├── Category
│ ├── Validator.php
│ ├── Category.php
│ ├── Presenters/
│ └── Repository.php
├── Content
│ ├── Content.php
│ └── Repository.php
├── Course
│ ├── Course.php
│ └── Repository.php
├── ProductList
│ ├── ProductList.php
│ └── Repository.php
CONCLUSÃO
Entenda!
Aplique!
Critique!
No silver
bullet!
Obrigado!