SlideShare uma empresa Scribd logo
PROGRAMANDO
MELHOR
PHP VERSION
Oi!
ME CHAMO LEONN LEITE
Evangelizador PHP e PHPDF
/leonnleite
@leonnleite
+leonnleite
ESSE É O
MILK
Ele é um gato
Programando Melhor - Flisol
Programando Melhor - Flisol
Faça o que eu digo
Porque muita coisa
daqui, eu não faço
“
DON'T WORRY
I'M A PERSONAL
TRAINER
DICAS
NIH/PIE
CLEAN CODE
SOLID
STUPID
OBJECT CALISTHENICS
ANALISE ESTATICA
Let's go
10 dicas Leonn Leite®
#1
TER UMA
INSPIRAÇÃO
Não se inspire somente no Steve Jobs,
Mark Zuckerberg, Larry Page
1 DE MAIO DE 1994
AYRTON SENNA
RUBENS BARRICHELLO
RECORDES
- Recorde de corridas
- Mais vezes em 3 lugar
- Maior velocidade já alcançada por piloto Brasileiros
- …
- 8 em número de pódios
- O 7 é o Senna
VAMO AOS NÚMEROS
DO RUBINHO
"Estude código de outras pessoas,
pegue um projeto que você usa e
vá aprender como ele funciona."
http://blog.augustopascutti.com/5min/2016/10/18/melhorando-como-desenvolvedor.html
@augustohp
#2
SAIBA LIDAR COM
FRUSTRAÇÕES
Fomos doutrinados
Para não sermos imunes a frustrações
Rocky, um lutador
1976
FRUSTRAÇÕES
DUBLADO
Ele vence
LEGENDADO
Ele empata
REALIDADE
Ele perde
Código tem validade
#3
Crie sua propria
framework
Nunca use ela
Programando Melhor - Flisol
vs
VOCÊ
https://github.com/PHPMT/PseudoORM
#4
Use um framework de
mercado
Mesmo se for fazer só uma
Besteirinha
Programando Melhor - Flisol
Programando Melhor - Flisol
#5
Melhore a
comunicação
Tente começar uma atividade,
somente depois de entender
tudo.
Programando Melhor - Flisol
#6
Aprenda
outras linguagens
- Java é melhor que PHP
- Senta, e me fala o porque
- Porque o meu professor falou
Mas seja especialista em uma
#7
Não programe
estruturado
"Estudos mostram que"...
- Dificuldade em manutenção
- Dificuldade em testes
- Dificuldade em reaproveitamento
- Dificuldade em ...
#8
Vá em
eventos
Se atualize das novidades
Faça network
phpDF
phpSP
phpRS
Rumo a certificação
PHP com rapadura
phpPB
PhpWomen
amsterdãPHP
Phpeste
nomad php
#9
Siga listas
de atualizações
http://asemanaphp.com.br/
#10
Esteja um passo a frente
das ferramentas do seu
trabalho
Esteja sempre sugerindo novas
ideias, mas nem sempre
O mercado de Brasília, usa basicamente
Zend Framework 1
#11 - dica exxxxtra
“Por não saber que
era impossível, ele foi lá e
fez”
Quem disse que você não dá conta?
#12 - dica exxxxtra
Teste
Testes everywhere
Ficou 12, porque fiz agora
Tudo é testavel
TUDO
USE CÓDIGO DOS
OUTROS
NIH
NOT INVENTED HERE
QUAL SOLUÇÃO?
https://pt.slideshare.net/rdohms/composer-the-right-way-010php
ANTES DELE
● Seus projetos tinha 100mb
● Atualizações não aconteciam
● Alterava o core de uma
biblioteca de terceiro
○ Ai que não atualizava mesmo
● Reutilização era ctrl+c/v
CLEAN CODE
CLEAN CODE
Uncle Bob
CLEAN CODE
Faça um merge
○ PSR 1
○ PSR 2
○ PSR 5?
○ PSR 12?
NAMING
<?php
$d; //dias
<?php
$dias;
<?php
$diasParaVencimentoBoleto;
Nomes que revelam
a intenção
<?php
class Usuario
{
// metodo para obter xpto
public function obter() {
// ...
}
public function regraNegocio37() {
// ...
}
}
<?php
class Usuario
{
public function obterDadosPagamento() {
// ...
}
}
Nomes
pronunciaveis
<?php
$dtYMDHiSCrc;
$arrUsr;
<?php
$dataHoraCriacao;
$usuarios;
Classes Substantivo
Metodo Verbo
<?php
class Usuario
{
public function salvar() {
//….
}
}
CLASSE
MÉTODO
● < 20 linhas
● Somente uma responsabilidade
● Ler de cima para baixo
● Poucos argumentos (ideal
nenhum)
Poucos argumentos
○ $renderer->render($page);
○ $page->render();
Poucos argumentos
Não use flags
○ $user->setEnabled(true);
○ $user->enable();
METÓDOS
Deve fazer algo
Deve dizer algo
Nunca os dois
class Empregado
{
// ...
public function set($attribute, $value)
{
// ...
return true;
}
// ...
if ($this->set('name', 'batata')) {...
// ...
}
DRY
DON'T REPEAT
YOURSELF
COMENTÁRIOS
"Necessário,
somente o
necessário… o
extraordinário é
demais."
COMENTÁRIOS
● Comentários relevantes
● Comentário não faz seu código
ruim/confuso em um código
bom/entendível.
● Tenha certeza que você está
"adicionando" informação.
<?php
// classe do usuario
class Usuario
{
// metodo para salvar o usuario
public function salvar() {
//….
}
}
SOLID
S
O
L
I
D
Single responsability
Open-closed
Liskov substitution
Interface segregation
Dependency inversion
Single responsability
Single responsability
Single responsability
Single responsability
Open-closed
“Software entities ... should be open for
extension, but closed for modification.”
Open-closed
CLOSE FOR
MODIFICATION
YAGNI
You Ain't Gonna Need
It.
function depositar(Conta $conta, float $valor, TipoConta $tipo)
{
if ($tipo->isCorrente()) {
// faz assim
}
if ($this->isPoupanca()) {
//faz diferente
}
}
OPEN FOR
EXTENSION
Não é
(necessariamente)
sobre herança
Eider Comum
Pato real
Pato-mandarim
abstract class Pato
{
public function nadar() { /** nada como um pato! */ }
public function quack() { /** quack como um pato! */ }
public function voar() { /** voa como um pato! */ }
}
class PatoReal extends Pato {}
class EiderComum extends Pato {}
class PatoMandarim extends Pato {}
class PatoBorracha extends Pato
{
public function nadar() { /** boia! */ }
public function quack() { /** apita! */ }
public function voar() { /** humm... faz nada! */ }
public function debug($code) { /** debug the code! */ }
}
class PatoMadeiraERodinha extends Pato
{
public function nadar() { /** boia?Afunda, talvez */ }
public function quack() { /** nada! */ }
public function voar() { /** humm... faz nada! */ }
}
interface NatacaoInterface
{
public function nadar();
}
interface QuackarInterface
{
public function quack();
}
interface VooInterface
{
public function voo();
}
interface QuackarInterface
{
public function quack();
}
class PatoQuackante implements QuackarInterface
{
public function quack()
{
/** faz barulho de um pato OFICIAL REAL */
}
}
interface QuackarInterface
{
public function quack();
}
class PatoMudo implements QuackarInterface
{
public function quack()
{
/** nada */
}
}
interface QuackarInterface
{
public function quack();
}
class PatoQueApita implements QuackarInterface
{
public function quack()
{
/** apita, tal como um pato de borracha */
}
}
class PatoReal
{
public function __construct(NatacaoInterface $natacao,
QuackarInterface $quackar, VooInterface $voo)
{
$this->natacao = $natacao;
$this->quackar = $quackar;
$this->voo = $voo;
}
public function voar()
{
return $this->voo->voar();
}
}
Liskov substitution
“Objects in a program should be
replaceable with instances of their
subtypes without altering the
correctness of that program.”
Liskov substitution
"If S is a subtype of T, then objects of
type T in a program may be replaced
with objects of type S without altering
any of the desirable properties of that
program"
Liskov substitution
Se parece um pato, tem bico de pato,
mas tem calda de castor - Você
provavelmente tem uma abstração
errada.
class Retangulo
{
private $base;
private $altura;
public function __construct(float $base, float $altura)
{
$this->base = $base;
$this->altura = $altura;
}
public function setBase($base) { $this->base = $base; }
public function setAltura($altura) { $this->altura = $altura; }
public function getAltura() { return $this->altura; }
public function getBase() { return $this->base; }
}
$transform = function(Retangulo &$retangulo) {
$retangulo->setAltura(10);
}
$retangulo = new Retangulo(20,30);
$transform($retangulo);
var_dump($retangulo->getAltura()); //agora é 10
var_dump($retangulo->getBase()); //continua 20
class Quadrado extends Retangulo
{
private $baseEAltura;
public function __construct(float $baseEAltura)
{
$this->baseEAltura = $baseEAltura;
}
public function setBase($base) { $this->baseEAltura = $base; }
public function setAltura($altura) { $this->baseEAltura = $altura; }
public function getAltura() { return $this->baseEAltura; }
public function getBase() { return $this->baseEAltura; }
}
$transform = function(Retangulo &$retangulo) {
$retangulo->setAltura(10);
}
$retangulo = new Quadrado(20,30);
$transform($retangulo);
var_dump($retangulo->getAltura()); //agora é 10
var_dump($retangulo->getBase()); //e tambem é 10
Interface segregation
O Princípio da Segregação de Interface (ISP) afirma que
nenhum cliente deve ser forçado a depender de
métodos que ele não use.
Interface segregation
PSR 6
CACHE
Interface segregation
interface CacheItemInterface
{
...
public function expiresAt($expiration);
…
}
Interface segregation
Dependency inversion
A. Módulos de alto nível não deveriam
depender de módulos de baixo nível. Ambos
deveriam depender de abstrações.
B. Abstrações não deveriam depender de
detalhes. Detalhes devem depender de
abstrações.
$pato = New PatoReal;
$pato = New PatoReal($nada, $quacka, $voa);
vs
Singleton
Tight Coupling
Untestability
Premature Optimization
Indescriptive Naming
Duplication
OBJECT
CALESTENICS
https://www.slideshare.net/guilhermeblanco/php-para-adultos-clean-code-e-object-
calisthenics
Não são bem regras
São coisas que
foram percebidas
#1
Uma única indentação
Por método
Evita subniveis
Evita multiplas responsabilidades
#2
Não use
else
Evita multiplas responsabilidades
Código mais limpo
Clean code, lembra?
public function foo()
{
if ($this->isBar()) {
return $this->bar();
}
// faça o que ia fazer
}
Programando Melhor - Flisol
#3
Encapsule os tipos
primitivos, caso haja
comportamento
Deixa o código mais legivel;
E outras coisa...
$thisSlide->do(new Animation());
$thisSlide->do(true);
#4
Uma ->
Por linha
Deixa o código mais legivel;
#5
Não abrevie
palavras
Lembra do clean code?
#6
Mantenha sua classe
enxuta
Menos é mais
NO CODE
NO PROBLEMS
#7
Limite suas instancias
de variáveis na sua classe
para no maximo 5
Baixo acoplamento
Class foo
{
Private $entityManager;
Private $userRepository;
Private $emailService;
Privete $smsService;
Private $perfilRepository;
Private $validator;
}
#8
Use classe de
coleções
Qualquer classe que contenha um
array, não deve conter outras
propriedades.
new UserCollection([$user1, $user2])
$userCollection->getFirst();
$userCollection->getLast();
#9
Não use getter
and setter
Você já ouviu falar da iniciativa
"Command bus" ..DDD, essas coisas?
É mais hard, mas vale a pena ler
#10
Documente
Seu código
ANALISE ESTATICA
Phpmd
Phpcs
Phpcpd
Phplint
Phpstam
Dúvidas?
Obrigato

Mais conteúdo relacionado

Mais procurados

Python 04
Python 04Python 04
Python 04
Bruno Catão
 
Python 03
Python 03Python 03
Python 03
Bruno Catão
 
PHP Experience 2016 - [Palestra] Keynote: PHP-7
PHP Experience 2016 - [Palestra] Keynote: PHP-7PHP Experience 2016 - [Palestra] Keynote: PHP-7
PHP Experience 2016 - [Palestra] Keynote: PHP-7
iMasters
 
Lista de exercícios em Bash (resolvida)
Lista de exercícios em Bash (resolvida) Lista de exercícios em Bash (resolvida)
Lista de exercícios em Bash (resolvida)
Marcelo Barros de Almeida
 
Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)
Wilson Júnior
 
Linguagem PHP
Linguagem PHPLinguagem PHP
Linguagem PHP
Bruno Cunha
 
Perl Moderno, dia5
Perl Moderno, dia5Perl Moderno, dia5
Perl Moderno, dia5
garux
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
Michael Castillo Granados
 
Perl Moderno, dia4
Perl Moderno, dia4Perl Moderno, dia4
Perl Moderno, dia4
garux
 
Python 01
Python 01Python 01
Python 01
Bruno Catão
 
Perl Moderno, dia3
Perl Moderno, dia3Perl Moderno, dia3
Perl Moderno, dia3
garux
 
Desenvolvendo Extensões PECL
Desenvolvendo Extensões PECLDesenvolvendo Extensões PECL
Desenvolvendo Extensões PECL
W3P Projetos Web
 
Minicurso: Python em 4 horas - FATEC SCS 2015
Minicurso: Python em 4 horas - FATEC SCS 2015 Minicurso: Python em 4 horas - FATEC SCS 2015
Minicurso: Python em 4 horas - FATEC SCS 2015
Alan Justino da Silva
 
Perl Moderno, dia2
Perl Moderno, dia2Perl Moderno, dia2
Perl Moderno, dia2
garux
 
Object Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simplesObject Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simples
Otávio Calaça Xavier
 
ReactPHP && programacao assincrona em PHP
ReactPHP && programacao assincrona em PHPReactPHP && programacao assincrona em PHP
ReactPHP && programacao assincrona em PHP
Luis Gustavo Almeida
 
Al sweigart, cap 3
Al sweigart, cap 3Al sweigart, cap 3
PHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object CalisthenicsPHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object Calisthenics
Guilherme Blanco
 
Java hidden features
Java hidden featuresJava hidden features
Java hidden features
Josenaldo de Oliveira Matos Filho
 

Mais procurados (19)

Python 04
Python 04Python 04
Python 04
 
Python 03
Python 03Python 03
Python 03
 
PHP Experience 2016 - [Palestra] Keynote: PHP-7
PHP Experience 2016 - [Palestra] Keynote: PHP-7PHP Experience 2016 - [Palestra] Keynote: PHP-7
PHP Experience 2016 - [Palestra] Keynote: PHP-7
 
Lista de exercícios em Bash (resolvida)
Lista de exercícios em Bash (resolvida) Lista de exercícios em Bash (resolvida)
Lista de exercícios em Bash (resolvida)
 
Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)
 
Linguagem PHP
Linguagem PHPLinguagem PHP
Linguagem PHP
 
Perl Moderno, dia5
Perl Moderno, dia5Perl Moderno, dia5
Perl Moderno, dia5
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
 
Perl Moderno, dia4
Perl Moderno, dia4Perl Moderno, dia4
Perl Moderno, dia4
 
Python 01
Python 01Python 01
Python 01
 
Perl Moderno, dia3
Perl Moderno, dia3Perl Moderno, dia3
Perl Moderno, dia3
 
Desenvolvendo Extensões PECL
Desenvolvendo Extensões PECLDesenvolvendo Extensões PECL
Desenvolvendo Extensões PECL
 
Minicurso: Python em 4 horas - FATEC SCS 2015
Minicurso: Python em 4 horas - FATEC SCS 2015 Minicurso: Python em 4 horas - FATEC SCS 2015
Minicurso: Python em 4 horas - FATEC SCS 2015
 
Perl Moderno, dia2
Perl Moderno, dia2Perl Moderno, dia2
Perl Moderno, dia2
 
Object Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simplesObject Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simples
 
ReactPHP && programacao assincrona em PHP
ReactPHP && programacao assincrona em PHPReactPHP && programacao assincrona em PHP
ReactPHP && programacao assincrona em PHP
 
Al sweigart, cap 3
Al sweigart, cap 3Al sweigart, cap 3
Al sweigart, cap 3
 
PHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object CalisthenicsPHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object Calisthenics
 
Java hidden features
Java hidden featuresJava hidden features
Java hidden features
 

Semelhante a Programando Melhor - Flisol

Why functional programming matters
Why functional programming mattersWhy functional programming matters
Why functional programming matters
Jean Carlo Machado
 
Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014
Michael Castillo Granados
 
O que há de novo no PHP 5.3
O que há de novo no PHP 5.3O que há de novo no PHP 5.3
O que há de novo no PHP 5.3
Jose Berardo
 
Dev Ext PHP
Dev Ext PHPDev Ext PHP
Dev Ext PHP
Andre Golvea
 
Introducao a orientacao a objetos com PHP
Introducao a orientacao a objetos com PHPIntroducao a orientacao a objetos com PHP
Introducao a orientacao a objetos com PHP
guilhermemar
 
Curso de Introdução - PHP
Curso de Introdução - PHPCurso de Introdução - PHP
Curso de Introdução - PHP
Evandro Klimpel Balmant
 
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Rafael Ponte
 
PHP 5.3 - Funções
PHP 5.3 - FunçõesPHP 5.3 - Funções
PHP 5.3 - Funções
George Mendonça
 
Nossa experiência com TDD
Nossa experiência com TDDNossa experiência com TDD
Nossa experiência com TDD
Nelson Senna do Amaral
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completa
Eduardo Bregaida
 
5 Maneiras de melhorar seu código PHP
5 Maneiras de melhorar seu código PHP5 Maneiras de melhorar seu código PHP
5 Maneiras de melhorar seu código PHP
Augusto das Neves
 
Php
PhpPhp
Advanced live testing em tempo real
Advanced live testing em tempo realAdvanced live testing em tempo real
Advanced live testing em tempo real
iMasters
 
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Willian Magalhães
 
Solid
SolidSolid
Aplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoAplicações rápidas para a Web com Django
Aplicações rápidas para a Web com Django
Freedom DayMS
 
DevTalk Zoox 04/2016
DevTalk Zoox 04/2016DevTalk Zoox 04/2016
DevTalk Zoox 04/2016
Leandro Silva
 
Crash Course Ruby & Rails
Crash Course Ruby & RailsCrash Course Ruby & Rails
Crash Course Ruby & Rails
Frevo on Rails
 
Hooks, o condimento mágico e escondido do WordPress
Hooks, o condimento mágico e escondido do WordPressHooks, o condimento mágico e escondido do WordPress
Hooks, o condimento mágico e escondido do WordPress
Zé Fontainhas
 
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Luís Cobucci
 

Semelhante a Programando Melhor - Flisol (20)

Why functional programming matters
Why functional programming mattersWhy functional programming matters
Why functional programming matters
 
Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014
 
O que há de novo no PHP 5.3
O que há de novo no PHP 5.3O que há de novo no PHP 5.3
O que há de novo no PHP 5.3
 
Dev Ext PHP
Dev Ext PHPDev Ext PHP
Dev Ext PHP
 
Introducao a orientacao a objetos com PHP
Introducao a orientacao a objetos com PHPIntroducao a orientacao a objetos com PHP
Introducao a orientacao a objetos com PHP
 
Curso de Introdução - PHP
Curso de Introdução - PHPCurso de Introdução - PHP
Curso de Introdução - PHP
 
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
 
PHP 5.3 - Funções
PHP 5.3 - FunçõesPHP 5.3 - Funções
PHP 5.3 - Funções
 
Nossa experiência com TDD
Nossa experiência com TDDNossa experiência com TDD
Nossa experiência com TDD
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completa
 
5 Maneiras de melhorar seu código PHP
5 Maneiras de melhorar seu código PHP5 Maneiras de melhorar seu código PHP
5 Maneiras de melhorar seu código PHP
 
Php
PhpPhp
Php
 
Advanced live testing em tempo real
Advanced live testing em tempo realAdvanced live testing em tempo real
Advanced live testing em tempo real
 
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
 
Solid
SolidSolid
Solid
 
Aplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoAplicações rápidas para a Web com Django
Aplicações rápidas para a Web com Django
 
DevTalk Zoox 04/2016
DevTalk Zoox 04/2016DevTalk Zoox 04/2016
DevTalk Zoox 04/2016
 
Crash Course Ruby & Rails
Crash Course Ruby & RailsCrash Course Ruby & Rails
Crash Course Ruby & Rails
 
Hooks, o condimento mágico e escondido do WordPress
Hooks, o condimento mágico e escondido do WordPressHooks, o condimento mágico e escondido do WordPress
Hooks, o condimento mágico e escondido do WordPress
 
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
 

Mais de Leonn Leite

Do legado ao DDD
Do legado ao DDDDo legado ao DDD
Do legado ao DDD
Leonn Leite
 
As maravilhas do service worker
As maravilhas do service workerAs maravilhas do service worker
As maravilhas do service worker
Leonn Leite
 
Como progressive web apps pode mudar a vida do seu site
Como progressive web apps pode mudar a vida do seu siteComo progressive web apps pode mudar a vida do seu site
Como progressive web apps pode mudar a vida do seu site
Leonn Leite
 
Identifique brechas, proteja sua aplicação | Php avenger e octopus
Identifique brechas, proteja sua aplicação | Php avenger e octopusIdentifique brechas, proteja sua aplicação | Php avenger e octopus
Identifique brechas, proteja sua aplicação | Php avenger e octopus
Leonn Leite
 
Testando sua aplicação com BDD - conf.phprs
Testando sua aplicação com BDD - conf.phprsTestando sua aplicação com BDD - conf.phprs
Testando sua aplicação com BDD - conf.phprs
Leonn Leite
 
O poder do crowdfunding
O poder do crowdfundingO poder do crowdfunding
O poder do crowdfunding
Leonn Leite
 

Mais de Leonn Leite (6)

Do legado ao DDD
Do legado ao DDDDo legado ao DDD
Do legado ao DDD
 
As maravilhas do service worker
As maravilhas do service workerAs maravilhas do service worker
As maravilhas do service worker
 
Como progressive web apps pode mudar a vida do seu site
Como progressive web apps pode mudar a vida do seu siteComo progressive web apps pode mudar a vida do seu site
Como progressive web apps pode mudar a vida do seu site
 
Identifique brechas, proteja sua aplicação | Php avenger e octopus
Identifique brechas, proteja sua aplicação | Php avenger e octopusIdentifique brechas, proteja sua aplicação | Php avenger e octopus
Identifique brechas, proteja sua aplicação | Php avenger e octopus
 
Testando sua aplicação com BDD - conf.phprs
Testando sua aplicação com BDD - conf.phprsTestando sua aplicação com BDD - conf.phprs
Testando sua aplicação com BDD - conf.phprs
 
O poder do crowdfunding
O poder do crowdfundingO poder do crowdfunding
O poder do crowdfunding
 

Programando Melhor - Flisol