Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Organizando o código do seu projeto em Laravel: do simples ao complexo

Organizando o código do seu projeto em Laravel: do simples ao complexo

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!

Guilherme Guitte

June 16, 2015
Tweet

More Decks by Guilherme Guitte

Other Decks in Programming

Transcript

  1. Apresentação • Trabalho na Leroy Merlin Brasil. • Co-organizer Meetup

    de Laravel em SP. • Co-organizer dos Hangouts do Laravel BR. @guilhermeguitte
  2. Desenvolver o projeto de uma forma incremental, começando com uma

    arquitetura enxuta, aplicar testes automatizados e quebrar em mais camadas sob demanda.
  3. 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"
  4. 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
  5. Separe em seu próprio contexto // composer.json { … "autoload":

    { "psr-4": { "App\\": "app/", "MyDomain\\": "my-domain/" } } … }
  6. 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
  7. 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