Slide 1

Slide 1 text

Organizando seu projeto em Laravel do simples ao complexo

Slide 2

Slide 2 text

Apresentação ● Trabalho na Leroy Merlin Brasil. ● Co-organizer Meetup de Laravel em SP. ● Co-organizer dos Hangouts do Laravel BR. @guilhermeguitte

Slide 3

Slide 3 text

Organização

Slide 4

Slide 4 text

A sua arquitetura pode ser desde uma casa simples...

Slide 5

Slide 5 text

Até...

Slide 6

Slide 6 text

Existe um amplo espectro de como Arquitetar

Slide 7

Slide 7 text

Em software é a mesma coisa...

Slide 8

Slide 8 text

Desde...

Slide 9

Slide 9 text

Até...

Slide 10

Slide 10 text

Mas, antes de definir uma arquitetura...

Slide 11

Slide 11 text

Você precisa entender

Slide 12

Slide 12 text

CONTEXTO

Slide 13

Slide 13 text

Porque será sua responsabilidade na definição da arquitetura, garantir...

Slide 14

Slide 14 text

Qualidade Externa

Slide 15

Slide 15 text

Qualidade Interna

Slide 16

Slide 16 text

Uma decisão errada para um contexto pode acabar com seu projeto.

Slide 17

Slide 17 text

Duas startups...

Slide 18

Slide 18 text

Uma grande empresa...

Slide 19

Slide 19 text

CONCLUSÃO

Slide 20

Slide 20 text

Desenvolver o projeto de uma forma incremental, começando com uma arquitetura enxuta, aplicar testes automatizados e quebrar em mais camadas sob demanda.

Slide 21

Slide 21 text

Agora… Como organizar minha aplicação?

Slide 22

Slide 22 text

Abordagem progressiva

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

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"

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

CONTEXTO

Slide 28

Slide 28 text

Separe em seu próprio contexto // composer.json { … "autoload": { "psr-4": { "App\\": "app/", "MyDomain\\": "my-domain/" } } … }

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

Seu model se tornou muito grande!

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

CONCLUSÃO

Slide 33

Slide 33 text

Entenda! Aplique! Critique!

Slide 34

Slide 34 text

No silver bullet!

Slide 35

Slide 35 text

No content

Slide 36

Slide 36 text

Obrigado!

Slide 37

Slide 37 text

No content