Slide 1

Slide 1 text

Laravel para Aplicações de Grande Porte

Slide 2

Slide 2 text

Quem Somos Vinicius Reis | @vinicius73 Engenheiro de Aplicações @ Decision6 CODECASTER @codecasts Diego Hernandes | @hernandev CTO @ Kino CODECASTER @ codecasts

Slide 3

Slide 3 text

Mas, o que é Grande Porte ?

Slide 4

Slide 4 text

Mas, o que é Grande Porte? - Aplicações de complexidade média a moderada. - Aplicações com muitas funcionalidades. - Aplicações com muitas regras de negócio. - Aplicações com lógica de domínio complexas. - Aplicações que pretendem evoluir - Aplicações de ‘longo prazo’

Slide 5

Slide 5 text

Perdendo o Controle!

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

Micro-services

Slide 10

Slide 10 text

monolítico micro-services

Slide 11

Slide 11 text

Módulos ● O que é um módulo? ● Como organizar? ● Como distribuir?

Slide 12

Slide 12 text

Módulos Módulo é uma palavra genérica de mais, varia muito com seu contexto e modo como é aplicado.

Slide 13

Slide 13 text

Módulos Os namespaces do PHP + Composer deixam sua aplicação naturalmente modular.

Slide 14

Slide 14 text

Módulos Tudo depende da estratégia de modularização. Tem que se não considerar a comunicação e dependências entre os “módulos” isso pode comprometer o uso e distribuição dos módulos.

Slide 15

Slide 15 text

Módulos, problemas com responsabilidades... A página inicial do módulo de FÓRUM deve carregar uma lista dos últimos posts da aplicação (do módulo BLOG). BLOG e FÓRUM são módulos separados, mas agora eles precisam se comunicar. Como fica o reúso deles? Além disso, ambos precisam do módulo de USUÁRIOS....

Slide 16

Slide 16 text

DDD

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

Domain Driven Development (ou algo inspirado...)

Slide 19

Slide 19 text

Pensando em Domínios - Usuários - Grupos - Permissões - Fórum - Perguntas - Respostas - Blog - Categorias - Tags - Comentários Um domínio é o “assunto/contexto” de um determinado negócio

Slide 20

Slide 20 text

E onde eu enfio o resto da aplicação?... Como Views, Lógica de pagamentos, entre outros?

Slide 21

Slide 21 text

SUPORTE FRAMEWORK APLICAÇÕES (UNIDADES) DOMÍNIOS

Slide 22

Slide 22 text

Aplicações (Unidades) - A principal responsabilidade das Unidades é a comunicação entre usuários (que também podem ser outras aplicações) e as outras camadas. - A camada de aplicação não tem intenção de ser portável para outras plataformas e tecnologias, visto que uma vez centralizadas as regras no domínio, a camada de aplicações passa a ser fina. Camada de I/O do Software Comumente é a camada HTTP, mas também pode ser uma camada acessível via terminal. Pode ser considerada uma camada “burra”, não possui regras de negócio.

Slide 23

Slide 23 text

Camada de Suporte Exemplos: - View Presenters - Base de repositórios e models - Camada de Pagamentos - Sistema de Notificações - Qualquer coisa que possa ser transformada em um pacote de uso genérico. Pacotes ‘in-house’. Classes que não se encaixam na camada de domínio, existem para centralizar esse tipo de rotina. Podem ser facilmente distribuídos como pacotes composer.

Slide 24

Slide 24 text

Dependência entre Camadas Support Domain Units Support não deve depender do domínio ou das Unidades Domínio pode depender de Suporte, mas não das unidades Unidades podem depender de ambos suporte e Domínio

Slide 25

Slide 25 text

Por onde começar? $ composer create codecasts/laravel meu-projeto

Slide 26

Slide 26 text

Show me the code! https://github.com/codecasts/codecasts

Slide 27

Slide 27 text

Perguntas