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

Post on 15-Apr-2017

1.047 views 0 download

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

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...

- 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

PhalconContras- 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!

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?

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

sf\Crawler

aura\signal

Pense!

Phalcon???

Perguntas?

Estamos contratando!

Valeu!