SlideShare uma empresa Scribd logo
1 de 96
Baixar para ler offline
Sua aplicação não é
filha de um framework
Dev In Company 2014
- Daniel Lima dos Anjos Pinheiro, a.k.a “Tonho da Lua”
Sobre mim...
- Daniel Lima dos Anjos Pinheiro, a.k.a “Tonho da Lua”
- Programador há “um tanto” de tempo (+10 anos)
Sobre mim...
- Daniel Lima dos Anjos Pinheiro, a.k.a “Tonho da Lua”
- Programador há “um tanto” de tempo (+10 anos)
- APAIXONADO por Arquitetura de Software
Sobre mim...
- Daniel Lima dos Anjos Pinheiro, a.k.a “Tonho da Lua”
- Programador há “um tanto” de tempo (+10 anos)
- APAIXONADO por Arquitetura de Software
- Músico, Produtor, DJ… essas coisas aí.
Sobre mim...
- Daniel Lima dos Anjos Pinheiro, a.k.a “Tonho da Lua”
- Programador há “um tanto” de tempo (+10 anos)
- APAIXONADO por Arquitetura de Software
- Músico, Produtor, DJ… essas coisas aí.
- @yourwebmaker
Sobre mim...
- Daniel Lima dos Anjos Pinheiro, a.k.a “Tonho da Lua”
- Programador há “um tanto” de tempo (+10 anos)
- APAIXONADO por Arquitetura de Software
- Músico, Produtor, DJ… essas coisas aí.
- @yourwebmaker (só escrevo besteira)
Sobre mim...
- Daniel Lima dos Anjos Pinheiro, a.k.a “Tonho da Lua”
- Programador há “um tanto” de tempo (+10 anos)
- APAIXONADO por Arquitetura de Software
- Músico, Produtor, DJ… essas coisas aí.
- @yourwebmaker (só escrevo besteira)
- fb.com/dlpinheiro
Sobre mim...
- Daniel Lima dos Anjos Pinheiro, a.k.a “Tonho da Lua”
- Programador há “um tanto” de tempo (+10 anos)
- APAIXONADO por Arquitetura de Software
- Músico, Produtor, DJ… essas coisas aí.
- @yourwebmaker (só escrevo besteira)
- fb.com/dlpinheiro
Sobre mim...
- Daniel Lima dos Anjos Pinheiro, a.k.a “Tonho da Lua”
- Programador há “um tanto” de tempo (+10 anos)
- APAIXONADO por Arquitetura de Software
- Músico, Produtor, DJ… essas coisas aí.
- @yourwebmaker (só escrevo besteira)
- fb.com/dlpinheiro
Sobre mim...
Sua aplicação não é filha de um framework
- Maior site de cifras do Brasil
- 560mil visitas diárias
- Projeto de 18 anos e…. crescendo!
- Código legado em alguns lugares
- Código espalhado
- “Feito em casa”
- Despadronizado
- Difícil de manter
Vamos usar um
framework!
Full-stack
- Zend
- Symfony
- Cake
- Laravel
- Phalcon
- “um tanto”
Qual iríamos usar?
Full-stack
- Zend
- Symfony
- Cake
- Laravel
- Phalcon
- “um tanto”
Qual iríamos usar?
Micro
- Silex
- Respect
- Slim
- Aura
- Flight
- “um tanto”
Phalcon
Phalcon
Prós
- Extension do PHP
- Compilado
- Alta performance
- Baixo consumo de memória
- Responde a um grande número de reqs/s
Phalcon
Phalcon
Phalcon
Phalcon
Phalcon
Contras
- Escrito em C
- Quem aqui é um bom desenvolvedor C?
- Péssimo para testar
- “final” em diversos métodos
- Péssimo para debugar
- Stack-trace? Onde? Como?
Quem aqui é um bom
desenvolvedor C?
OK...
Dá pra levar
#chatiado
Até que…
HHVM
HHVM
- Symfony 2 + HHVM > Phalcon
- Zend 2 + HHVM > Phalcon
- Controle do framework usado
- Debug e manutenção do framework usado
HHVM
HHVM
HHVM
Assunto pra outra palestra
=)
Let’s code direito!!!
Let’s Desacoplar!
Não… Pera!
Pense!
- Isso não é receita de bolo!
- Assim como quase tudo em dev também não é!
- Talvez não seja o caso para sites novos!
- Não é necessário reinventar a roda!
Pense!
Pensou?
Let’s code direito!!!
Separando conceitos
MVC?
Quanto mais camadas
melhor!
Sua aplicação não é filha de um framework
Divida camadas em sub-
camadas
User Interface
Application
Domain
Infra
Forms Nav Grid Search
Input Validation Session Auth Router
Domain
Services
Entities Repositories Value Objects
Database Cache FileSystem Log
...
Factories
Domain
Domain
Services
Entities Repositories Value Objects Factories
Domain do Cifra Club
Domain
Domain
Services
Entities Repositories Value Objects Factories
- Exibir cifras
- Transpor cifras
- Listar músicas
- Ver video aulas
- Enviar cifra
- Moderar cifra
- Moderar usuários
- Top artistas por periodo
- Top cifras por periodo
- Segredinhos =)
Domain
Domain
Services
Entities Repositories Value Objects Factories
Domain é vida!
- Independente do framework, ele será o mesmo!
- Se importe com ele, de verdade =)
- Coração da sua aplicação!
Domain
Domain
Services
Entities Repositories Value Objects Factories
Domain é vida!
- Independente do framework, ele será o mesmo!
- Se importe com ele, de verdade =)
- Coração da sua aplicação!
- Ele NÃO DEVE saber qual framework é usado.
- Ele NÃO DEVE saber qual banco ou infra é usada.
Domain
Domain
Services
Entities Repositories Value Objects Factories
Mas… Como separá-lo?
Interfaces
Repositories
Services
S.O.L.I.D.
Tudo isso ligado com...
Injeção de
Dependência
Cadê o código?
- Entidades
- Interfaces dos repositórios
- Implementação dos repositórios
- Serviço
- Controller
- Config das dependencias
- Index.php
Gist
Reflexões sobre o gist...
Apesar de parecerem
“simples” e “facilitar” a
vida, caia fora deles!
“deles”, quem?
dos frameworks?
NÃO!!!
Desses caras aqui!!!
- C.R.U.D.
Desses caras aqui!!!
- C.R.U.D.
- Arrays
Desses caras aqui!!!
- C.R.U.D.
- Arrays
- Rotinas
Desses caras aqui!!!
- C.R.U.D.
- Arrays
- Rotinas
- Código “Deus”
Desses caras aqui!!!
Interfaces devem
representar o que seu
Domain faz...
interface MusicaRepositoryInterface
{
function buscarMaisAcessadas($quantidade = 1000);
function buscarMaisAcessadasPorArtista(Artista $artista);
}
#bom
interface ArtistaRepositoryInterface
{
function buscarMaisAcessados(Periodo $periodo);
}
#bom
… E depois devem ser
implementadas em outras
camadas!
class MusicaDbRepository implements MusicaRepositoryInterface
{
function buscarMaisAcessadas($quantidade = 1000)
{ //.. acessa o banco }
function buscarMaisAcessadasPorArtista(Artista $artista)
{ //.. acessa o banco }
}
#bom
“Saber” muito em OO é
MUITO ruim!
class DomainClass
{
public function fazAlgumaCoisa()
{
$infraObject = new InfraClass;
$applicationObject = new ApplicationClass;
$uiObject = new UIClass;
}
}
#ruim
class DomainClass
{
public function fazAlgumaCoisa(
DomainInterfaceX $infraObject,
DomainInterfaceY $appObject,
DomainInterfaceZ $uiObject,
)
{ //.. }
}
#bom
Evite usar o operador
“new” dentro de métodos
public function fazAlgo()
{
$componente = new Componente;
}
#ruim
$componente = new SeuComponente;
//..
public function fazAlgo(SeuComponente
$componente)
{
$foo = $componente->fazAlgo();
}
#bom
Evite singletons dentro de
*suas* classes
public function fazAlgo()
{
$componente = $frameworkComponente::
getInstance();
}
#ruim
$componente = $frameworkComponente::getInstance();
//..
public function fazAlgo(SeuComponente
$componente)
{
$componente->fazAlgo();
}
#bom
Evite herança de
componentes do
framework no seu Domain
class DomainClass extends FrameworkClass
#ruim
class DomainClass
#bom
Lembre-se:
“Software development is
all design”
Seja pramático na escolha
das suas libs...
… evite libs “novas”, pouco
ativas, non-community
standards…
#use libs de verdade
TWIG
Monolog
Doctrine
sfCrawler
aurasignal
Sua aplicação não é filha de um framework
Pense!
Phalcon???
Perguntas?
Guilherme Blanco
Agradecimentos
Luís Cobucci
Referências
Patterns of Enterprise Application
Architecture
Domain-Driven Design: Tackling
Complexity in the Heart of Software
Refactoring: Improving the Design
of Existing Code
Estamos contratando!
Valeu!

Mais conteúdo relacionado

Semelhante a Sua aplicação não é filha de um framework

Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerGiovanni Kenji Shiroma
 
Palestra Faculdade Lourenço Filho
Palestra Faculdade Lourenço FilhoPalestra Faculdade Lourenço Filho
Palestra Faculdade Lourenço Filhorafarubert
 
Tester, pegue suas coisas, você está demitido
Tester, pegue suas coisas, você está demitidoTester, pegue suas coisas, você está demitido
Tester, pegue suas coisas, você está demitidoLeonardo Galani
 
Leonardo Galani - Tester, pegue suas coisas porque vc está demitido
Leonardo Galani - Tester, pegue suas coisas porque vc está demitidoLeonardo Galani - Tester, pegue suas coisas porque vc está demitido
Leonardo Galani - Tester, pegue suas coisas porque vc está demitidominastestingconference
 
Do código à produção com Gitlab (mundo python)
Do código à produção com Gitlab (mundo python)Do código à produção com Gitlab (mundo python)
Do código à produção com Gitlab (mundo python)Better Developer
 
Front end, back end, full stack. onde vivem o que comem hoje na uni_granrio
Front end, back end, full stack.  onde vivem  o que comem   hoje na uni_granrioFront end, back end, full stack.  onde vivem  o que comem   hoje na uni_granrio
Front end, back end, full stack. onde vivem o que comem hoje na uni_granrioAnna Cruz
 
Quebrando o Orgulho! Open Source e Proprietário dão certo juntos sim!!
Quebrando o Orgulho! Open Source e Proprietário dão certo juntos sim!!Quebrando o Orgulho! Open Source e Proprietário dão certo juntos sim!!
Quebrando o Orgulho! Open Source e Proprietário dão certo juntos sim!!André Espeiorin
 
Latinoware 2019 - DEsenvolvimento mobile em Nivel jedi
Latinoware 2019 - DEsenvolvimento mobile em Nivel jediLatinoware 2019 - DEsenvolvimento mobile em Nivel jedi
Latinoware 2019 - DEsenvolvimento mobile em Nivel jediAlessandro Binhara
 
TDC 2012 Florianópolis - Padrões (Patterns) de desenvolvimento com Windows Azure
TDC 2012 Florianópolis - Padrões (Patterns) de desenvolvimento com Windows AzureTDC 2012 Florianópolis - Padrões (Patterns) de desenvolvimento com Windows Azure
TDC 2012 Florianópolis - Padrões (Patterns) de desenvolvimento com Windows AzureLuciano Condé
 
Desenvolvimento Web com Software Livre
Desenvolvimento Web com Software LivreDesenvolvimento Web com Software Livre
Desenvolvimento Web com Software LivreGivanaldo Rocha
 
React native - testável e organizado
React native - testável e organizadoReact native - testável e organizado
React native - testável e organizadoAndré Antunes Vieira
 
Usando Javascript para reconhecer pessoas - Hack Town 2018
Usando Javascript para reconhecer pessoas - Hack Town 2018Usando Javascript para reconhecer pessoas - Hack Town 2018
Usando Javascript para reconhecer pessoas - Hack Town 2018Erick Wendel
 
Desenvolvimento Ágil com Rails GURUSC 2011
Desenvolvimento Ágil com Rails GURUSC 2011Desenvolvimento Ágil com Rails GURUSC 2011
Desenvolvimento Ágil com Rails GURUSC 2011Andre Bernardes
 
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreamsJacqueline Abreu
 
Engenharia de Software - Conceitos e Modelos de Desenvolvimento
Engenharia de Software - Conceitos e Modelos de Desenvolvimento Engenharia de Software - Conceitos e Modelos de Desenvolvimento
Engenharia de Software - Conceitos e Modelos de Desenvolvimento Sérgio Souza Costa
 
ArduinoDay 2015 - OpenDevice
ArduinoDay 2015 -  OpenDeviceArduinoDay 2015 -  OpenDevice
ArduinoDay 2015 - OpenDeviceRicardo Rufino
 

Semelhante a Sua aplicação não é filha de um framework (20)

Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & Docker
 
Palestra Faculdade Lourenço Filho
Palestra Faculdade Lourenço FilhoPalestra Faculdade Lourenço Filho
Palestra Faculdade Lourenço Filho
 
Tester, pegue suas coisas, você está demitido
Tester, pegue suas coisas, você está demitidoTester, pegue suas coisas, você está demitido
Tester, pegue suas coisas, você está demitido
 
Leonardo Galani - Tester, pegue suas coisas porque vc está demitido
Leonardo Galani - Tester, pegue suas coisas porque vc está demitidoLeonardo Galani - Tester, pegue suas coisas porque vc está demitido
Leonardo Galani - Tester, pegue suas coisas porque vc está demitido
 
Do código à produção com Gitlab (mundo python)
Do código à produção com Gitlab (mundo python)Do código à produção com Gitlab (mundo python)
Do código à produção com Gitlab (mundo python)
 
Front end, back end, full stack. onde vivem o que comem hoje na uni_granrio
Front end, back end, full stack.  onde vivem  o que comem   hoje na uni_granrioFront end, back end, full stack.  onde vivem  o que comem   hoje na uni_granrio
Front end, back end, full stack. onde vivem o que comem hoje na uni_granrio
 
Mini Curso Mashup Coreu
Mini Curso Mashup CoreuMini Curso Mashup Coreu
Mini Curso Mashup Coreu
 
Quebrando o Orgulho! Open Source e Proprietário dão certo juntos sim!!
Quebrando o Orgulho! Open Source e Proprietário dão certo juntos sim!!Quebrando o Orgulho! Open Source e Proprietário dão certo juntos sim!!
Quebrando o Orgulho! Open Source e Proprietário dão certo juntos sim!!
 
Latinoware 2019 - DEsenvolvimento mobile em Nivel jedi
Latinoware 2019 - DEsenvolvimento mobile em Nivel jediLatinoware 2019 - DEsenvolvimento mobile em Nivel jedi
Latinoware 2019 - DEsenvolvimento mobile em Nivel jedi
 
TDC 2012 Florianópolis - Padrões (Patterns) de desenvolvimento com Windows Azure
TDC 2012 Florianópolis - Padrões (Patterns) de desenvolvimento com Windows AzureTDC 2012 Florianópolis - Padrões (Patterns) de desenvolvimento com Windows Azure
TDC 2012 Florianópolis - Padrões (Patterns) de desenvolvimento com Windows Azure
 
Mergulhando no ecossistema .NET
Mergulhando no ecossistema .NETMergulhando no ecossistema .NET
Mergulhando no ecossistema .NET
 
Desenvolvimento Web com Software Livre
Desenvolvimento Web com Software LivreDesenvolvimento Web com Software Livre
Desenvolvimento Web com Software Livre
 
React native - testável e organizado
React native - testável e organizadoReact native - testável e organizado
React native - testável e organizado
 
Usando Javascript para reconhecer pessoas - Hack Town 2018
Usando Javascript para reconhecer pessoas - Hack Town 2018Usando Javascript para reconhecer pessoas - Hack Town 2018
Usando Javascript para reconhecer pessoas - Hack Town 2018
 
Desenvolvimento Ágil com Rails GURUSC 2011
Desenvolvimento Ágil com Rails GURUSC 2011Desenvolvimento Ágil com Rails GURUSC 2011
Desenvolvimento Ágil com Rails GURUSC 2011
 
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
 
Engenharia de Software - Conceitos e Modelos de Desenvolvimento
Engenharia de Software - Conceitos e Modelos de Desenvolvimento Engenharia de Software - Conceitos e Modelos de Desenvolvimento
Engenharia de Software - Conceitos e Modelos de Desenvolvimento
 
DDD - Step by Step
DDD - Step by StepDDD - Step by Step
DDD - Step by Step
 
ArduinoDay 2015 - OpenDevice
ArduinoDay 2015 -  OpenDeviceArduinoDay 2015 -  OpenDevice
ArduinoDay 2015 - OpenDevice
 
Debug de cabo a rabo
Debug de cabo a raboDebug de cabo a rabo
Debug de cabo a rabo
 

Sua aplicação não é filha de um framework