SlideShare uma empresa Scribd logo
1 de 30
Baixar para ler offline
Fugindodas
armadilhas
doMVC
Quemsoueu?
Oi!eu
souoEdy
OMVC
A arquitetura foi desenvolvida para ser usado
em projetos de interface visual
Foi criado na década de 70
View
Controller
Model
Regrade
negócio
naMODEL
émuitoRUIM
ConceitodaMODEL
ConceitodaMODEL
ConceitodaMODEL
ConceitodaMODEL
class Sayajin extends Model
{
protected $table = "dragon_ball_sayajin";
protected $primaryKey = "saya_jin_id";
public function obterSayajinPelaForca($nome, $poder)
{
$sayajin = $this->where('nome', '=', $nome)->where('poder', '=', $poder)
->join('mundo', 'mondo.id', '=', ‘dragon_ball_sayajin.cod_mundo')->first();
$dadosDoInimigos = $sayajin->inimigos;
$inimigos = [];
foreach ($dadosDoInimigos as $key => $value) {
$inimigos[$key] = $value->toArray();
$geocode = new Geocode($value->endereco);
$inimigos[$key]['lat'] = $geocode->lat();
$inimigos[$key]['long'] = $geocode->long();
};
$cabelos = "curto e preto";
if ($poder == 3) {
$cabelos = "longos e loiro";
}
$data = $sayajin->toArray();
$data['cabelos'] = $cabelos;
return [
'sayadin' => $data,
'inimigos' => $inimigos
];
class Sayajin extends Model
{
protected $table = "dragon_ball_sayajin";
protected $primaryKey = "saya_jin_id";
public function obterSayajinPelaForca($nome, $poder)
{
$sayajin = $this->where('nome', '=', $nome)->where('poder', '=', $poder)
->join('mundo', 'mondo.id', '=', ‘dragon_ball_sayajin.cod_mundo')->first();
$dadosDoInimigos = $sayajin->inimigos;
$inimigos = [];
foreach ($dadosDoInimigos as $key => $value) {
$inimigos[$key] = $value->toArray();
$geocode = new Geocode($value->endereco);
$inimigos[$key]['lat'] = $geocode->lat();
$inimigos[$key]['long'] = $geocode->long();
};
$cabelos = "curto e preto";
if ($poder == 3) {
$cabelos = "longos e loiro";
}
$data = $sayajin->toArray();
$data['cabelos'] = $cabelos;
return [
'sayadin' => $data,
'inimigos' => $inimigos
];
class Sayajin extends Model
{
protected $table = "dragon_ball_sayajin";
protected $primaryKey = "saya_jin_id";
public function obterSayajinPelaForca($nome, $poder)
{
$sayajin = $this->where('nome', '=', $nome)->where('poder', '=', $poder)
->join('mundo', 'mondo.id', '=', ‘dragon_ball_sayajin.cod_mundo')->first();
$dadosDoInimigos = $sayajin->inimigos;
$inimigos = [];
foreach ($dadosDoInimigos as $key => $value) {
$inimigos[$key] = $value->toArray();
$geocode = new Geocode($value->endereco);
$inimigos[$key]['lat'] = $geocode->lat();
$inimigos[$key]['long'] = $geocode->long();
};
$cabelos = "curto e preto";
if ($poder == 3) {
$cabelos = "longos e loiro";
}
$data = $sayajin->toArray();
$data['cabelos'] = $cabelos;
return [
'sayadin' => $data,
'inimigos' => $inimigos
];
class Sayajin extends Model
{
protected $table = "dragon_ball_sayajin";
protected $primaryKey = "saya_jin_id";
public function obterSayajinPelaForca($nome, $poder)
{
$sayajin = $this->where('nome', '=', $nome)->where('poder', '=', $poder)
->join('mundo', 'mondo.id', '=', ‘dragon_ball_sayajin.cod_mundo')->first();
$dadosDoInimigos = $sayajin->inimigos;
$inimigos = [];
foreach ($dadosDoInimigos as $key => $value) {
$inimigos[$key] = $value->toArray();
$geocode = new Geocode($value->endereco);
$inimigos[$key]['lat'] = $geocode->lat();
$inimigos[$key]['long'] = $geocode->long();
};
$cabelos = "curto e preto";
if ($poder == 3) {
$cabelos = "longos e loiro";
}
$data = $sayajin->toArray();
$data['cabelos'] = $cabelos;
return [
'sayadin' => $data,
'inimigos' => $inimigos
];
Éaiqueentrao nosso
SuperSayajin1
O Serviço
Éaiqueentrao nosso
SuperSayajin1
O Serviço
Benefíciosdessa
Abordagem
Fica entre os controller e as models
Essa camada ficará responsável pela
implementação da Regra de negócio
Essa camada também ficará responsável em
se comunicar com outros serviços
class SayajinService
{
public function obterSayajinPelaForca($nome, $poder)
{
$sayajin = Sayajin::where('nome', '=', $nome)
->where('poder', '=', $poder)
->join('mundo', 'id', '=', 'dragon_ball_sayajin.cod_mundo')
->first();
$dadosDoInimigos = $sayajin->inimigos;
$inimigos = [];
foreach ($dadosDoInimigos as $key => $value) {
$inimigos[$key] = $value->toArray();
$geocode = new Geocode($inimigos['endereco']);
$inimigos[$key][‘lat'] = $geocode->lat();
$inimigos[$key]['long'] = $geocode->long();
};
$cabelos = "curto e preto";
if ($poder == 3) {
$cabelos = "longos e loiro";
}
$data = $sayajin->toArray();
$data['cabelos'] = $cabelos;
return [
'sayajin' => $data,
'inimigos' => $inimigos
];
}
class SayajinService
{
public function obterSayajinPelaForca($nome, $poder)
{
$sayajin = Sayajin::where('nome', '=', $nome)
->where('poder', '=', $poder)
->join('mundo', 'id', '=', 'dragon_ball_sayajin.cod_mundo')
->first();
$dadosDoInimigos = $sayajin->inimigos;
$inimigos = [];
foreach ($dadosDoInimigos as $key => $value) {
$inimigos[$key] = $value->toArray();
$geocode = new Geocode($inimigos['endereco']);
$inimigos[$key][‘lat'] = $geocode->lat();
$inimigos[$key]['long'] = $geocode->long();
};
$cabelos = "curto e preto";
if ($poder == 3) {
$cabelos = "longos e loiro";
}
$data = $sayajin->toArray();
$data['cabelos'] = $cabelos;
return [
'sayajin' => $data,
'inimigos' => $inimigos
];
}
class Sayajin extends Model
{
protected $table = "dragon_ball_sayajin";
protected $primaryKey = "saya_jin_id";
public function inimigos()
{
return $this->hasMany('Inimigos');
}
}
Maisissonão
étudo.
Aindatemos
problemas!
class SayajinService
{
public function obterSayajinPelaForca($nome, $poder)
{
$sayajin = Sayajin::where('nome', '=', $nome)
->where('poder', '=', $poder)
->join('mundo', 'id', '=', 'dragon_ball_sayajin.cod_mundo')
->first();
$dadosDoInimigos = $sayajin->inimigos;
$inimigos = [];
foreach ($dadosDoInimigos as $key => $value) {
$inimigos[$key] = $value->toArray();
$geocode = new Geocode($inimigos['endereco']);
$inimigos[$key][‘lat'] = $geocode->lat();
$inimigos[$key]['long'] = $geocode->long();
};
$cabelos = "curto e preto";
if ($poder == 3) {
$cabelos = "longos e loiro";
}
$data = $sayajin->toArray();
$data['cabelos'] = $cabelos;
return [
'sayajin' => $data,
'inimigos' => $inimigos
];
}
class Sayajin extends Model
{
protected $table = "dragon_ball_sayajin";
protected $primaryKey = "saya_jin_id";
public function inimigos()
{
return $this->hasMany('Inimigos');
}
}
class SayajinService
{
public function obterSayajinPelaForca($nome, $poder)
{
$sayajin = Sayajin::where('nome', '=', $nome)
->where('poder', '=', $poder)
->join('mundo', 'id', '=', 'dragon_ball_sayajin.cod_mundo')
->first();
$dadosDoInimigos = $sayajin->inimigos;
$inimigos = [];
foreach ($dadosDoInimigos as $key => $value) {
$inimigos[$key] = $value->toArray();
$geocode = new Geocode($inimigos['endereco']);
$inimigos[$key][‘lat'] = $geocode->lat();
$inimigos[$key]['long'] = $geocode->long();
};
$cabelos = "curto e preto";
if ($poder == 3) {
$cabelos = "longos e loiro";
}
$data = $sayajin->toArray();
$data['cabelos'] = $cabelos;
return [
'sayajin' => $data,
'inimigos' => $inimigos
];
}
class Sayajin extends Model
{
protected $table = "dragon_ball_sayajin";
protected $primaryKey = "saya_jin_id";
public function inimigos()
{
return $this->hasMany('Inimigos');
}
}
Éporissoqueprecisamos
doSuperSayajinLevel2
ORepositório
Benefíciosdessa
Abordagem
Definir uma camada unica de acesso aos dados
Apoia o modelo fornecendo a
persistência e leitura dos dados
Elimina as consultas da camada de negócio
Separa claramente a comunicação com
o banco de sua manipulação
Pode entregar qualquer modelo para os serviço
class SayajinRepository
{
public function obterSayajin($params)
{
$sayajin = Sayajin::where('nome', '=', $params['nome'])
->where('poder', '=', $params['poder'])
->join('mundo', 'mondo.id', '=', 'dragon_ball_sayajin.cod_mundo')
->first();
$dadosDoInimigos = $sayajin->inimigos;
return [
'sayajin' => $sayajin->toArray(),
'inimigos' => $dadosDoInimigos->toArray(),
]
}
}
class SayajinService
{
private $repositorio
public function __construct(SayajinRepository $repositorio)
{
$this->repositorio = $repositorio;
}
public function obterSayajinPelaForca($nome, $poder)
{
$sayajin = $this->repositorio->obterSayajin(
['nome' => $nome,'poder' => $poder]
);
$inimigos = array_map(function($value){
$geocode = new Geocode($value['endereco']);
$value['lat'] = $geocode->lat();
$value['long'] = $geocode->long();
return $inimigos;
}, $sayajin['inimigos']);
$cabelos = "curto e preto";
if ($poder == 3) {
$cabelos = "longos e loiro";
}
$sayajin['cabelos'] = $cabelos;
return [
'sayadin' => $sayajin,
'inimigos' => $inimigos
Novodiagrama
View
Controller
Model
Repository
Service
Eparatransformar-seem
SuperSayajin3
Desacopleaindamais
IoC - Containers e DI
Arquitetura Hexagonal
ExpressiveFiquem de olho
Perguntas?
Obrigado
edyonil@gmail.com
telegram,twitteregithub:@edyonil
phpbanotelegram:@phpba
blog:phpba.com.br
Obrigado
edyonil@gmail.com
telegram,twitteregithub:@edyonil
phpbanotelegram:@phpba
blog:phpba.com.br

Mais conteúdo relacionado

Mais procurados

jQuery - Visão Geral
jQuery - Visão GeraljQuery - Visão Geral
jQuery - Visão GeralKaio Valente
 
[Curso Java Basico] Aula 62: Varargs
[Curso Java Basico] Aula 62: Varargs[Curso Java Basico] Aula 62: Varargs
[Curso Java Basico] Aula 62: VarargsLoiane Groner
 
PHPubSP Object Calisthenics aplicado ao PHP
PHPubSP Object Calisthenics aplicado ao PHPPHPubSP Object Calisthenics aplicado ao PHP
PHPubSP Object Calisthenics aplicado ao PHPGuilherme Blanco
 
JavaScript: prototipação, closure e encapsulamento
JavaScript: prototipação, closure e encapsulamentoJavaScript: prototipação, closure e encapsulamento
JavaScript: prototipação, closure e encapsulamentoRicardo Valeriano
 
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 simplesOtávio Calaça Xavier
 
Computação Científica com Python, Numpy e Scipy
Computação Científica com Python, Numpy e ScipyComputação Científica com Python, Numpy e Scipy
Computação Científica com Python, Numpy e ScipyMarcel Caraciolo
 
modernizando a arquitertura de sua aplicação
modernizando a arquitertura  de sua aplicaçãomodernizando a arquitertura  de sua aplicação
modernizando a arquitertura de sua aplicaçãoAntonio Spinelli
 
Introdução a Redes de Computadores - 8 - Nível de Transporte - Sockets
Introdução a Redes de Computadores - 8 - Nível de Transporte - SocketsIntrodução a Redes de Computadores - 8 - Nível de Transporte - Sockets
Introdução a Redes de Computadores - 8 - Nível de Transporte - SocketsAndre Peres
 
O que você NÃO aprendeu sobre Programação Orientada a Objetos
O que você NÃO aprendeu sobre Programação Orientada a ObjetosO que você NÃO aprendeu sobre Programação Orientada a Objetos
O que você NÃO aprendeu sobre Programação Orientada a ObjetosDanilo Sato
 
JavaFX e Scala - Como Leite com Bolacha
JavaFX e Scala - Como Leite com BolachaJavaFX e Scala - Como Leite com Bolacha
JavaFX e Scala - Como Leite com BolachaRafael Afonso
 
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes AuraPHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes AuraFlávio Lisboa
 
Cafe com Tom - ExtJS 4
Cafe com Tom - ExtJS 4Cafe com Tom - ExtJS 4
Cafe com Tom - ExtJS 4Loiane Groner
 
Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP Luis Gustavo Almeida
 

Mais procurados (20)

PHP ao Extremo
PHP ao ExtremoPHP ao Extremo
PHP ao Extremo
 
jQuery - Visão Geral
jQuery - Visão GeraljQuery - Visão Geral
jQuery - Visão Geral
 
[Curso Java Basico] Aula 62: Varargs
[Curso Java Basico] Aula 62: Varargs[Curso Java Basico] Aula 62: Varargs
[Curso Java Basico] Aula 62: Varargs
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDB
 
PHPubSP Object Calisthenics aplicado ao PHP
PHPubSP Object Calisthenics aplicado ao PHPPHPubSP Object Calisthenics aplicado ao PHP
PHPubSP Object Calisthenics aplicado ao PHP
 
JavaScript: prototipação, closure e encapsulamento
JavaScript: prototipação, closure e encapsulamentoJavaScript: prototipação, closure e encapsulamento
JavaScript: prototipação, closure e encapsulamento
 
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
 
Computação Científica com Python, Numpy e Scipy
Computação Científica com Python, Numpy e ScipyComputação Científica com Python, Numpy e Scipy
Computação Científica com Python, Numpy e Scipy
 
modernizando a arquitertura de sua aplicação
modernizando a arquitertura  de sua aplicaçãomodernizando a arquitertura  de sua aplicação
modernizando a arquitertura de sua aplicação
 
SQL - Banco de Dados Biblioteca
SQL - Banco de Dados BibliotecaSQL - Banco de Dados Biblioteca
SQL - Banco de Dados Biblioteca
 
Introdução a Redes de Computadores - 8 - Nível de Transporte - Sockets
Introdução a Redes de Computadores - 8 - Nível de Transporte - SocketsIntrodução a Redes de Computadores - 8 - Nível de Transporte - Sockets
Introdução a Redes de Computadores - 8 - Nível de Transporte - Sockets
 
O que você NÃO aprendeu sobre Programação Orientada a Objetos
O que você NÃO aprendeu sobre Programação Orientada a ObjetosO que você NÃO aprendeu sobre Programação Orientada a Objetos
O que você NÃO aprendeu sobre Programação Orientada a Objetos
 
JavaFX e Scala - Como Leite com Bolacha
JavaFX e Scala - Como Leite com BolachaJavaFX e Scala - Como Leite com Bolacha
JavaFX e Scala - Como Leite com Bolacha
 
Escrevendo plugins JQuery
Escrevendo plugins JQueryEscrevendo plugins JQuery
Escrevendo plugins JQuery
 
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes AuraPHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
 
Cafe com Tom - ExtJS 4
Cafe com Tom - ExtJS 4Cafe com Tom - ExtJS 4
Cafe com Tom - ExtJS 4
 
Introdução à JQuery
Introdução à JQueryIntrodução à JQuery
Introdução à JQuery
 
Php04
Php04Php04
Php04
 
Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP
 
SPL Datastructures
SPL DatastructuresSPL Datastructures
SPL Datastructures
 

Semelhante a Fugindo das armadilhas do MVC

Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que pareceImpacta Eventos
 
Otimização e Escalabilidade
Otimização e EscalabilidadeOtimização e Escalabilidade
Otimização e Escalabilidademetzen
 
Da Argila Ao Forte - Como desenvolver uma loja virtual
Da Argila Ao Forte - Como desenvolver uma loja virtualDa Argila Ao Forte - Como desenvolver uma loja virtual
Da Argila Ao Forte - Como desenvolver uma loja virtualMichael Castillo Granados
 
Perl Moderno, dia3
Perl Moderno, dia3Perl Moderno, dia3
Perl Moderno, dia3garux
 
Xdebug: Seus problemas acabaram!
Xdebug: Seus problemas acabaram!Xdebug: Seus problemas acabaram!
Xdebug: Seus problemas acabaram!Vitor Mattos
 
Criando controle de acesso com php e my sql
Criando controle de acesso com php e my sqlCriando controle de acesso com php e my sql
Criando controle de acesso com php e my sqlPaulo Damas
 
PHP robusto com Zend Framework
PHP robusto com Zend FrameworkPHP robusto com Zend Framework
PHP robusto com Zend FrameworkJaime Neto
 
Programando com estilo e Performance
Programando com estilo e Performance Programando com estilo e Performance
Programando com estilo e Performance Tarcisio Silva
 
Programando em PHP com Estilo
Programando  em PHP com EstiloProgramando  em PHP com Estilo
Programando em PHP com EstiloTarcisio Silva
 
Refactoring sem complicação!
Refactoring sem complicação!Refactoring sem complicação!
Refactoring sem complicação!Thamara Hessel
 
Orientação a Objetos em PHP
Orientação a Objetos em PHPOrientação a Objetos em PHP
Orientação a Objetos em PHPzehzinho
 
PW03 - Programação Web PHP Arrays (Vetores)
PW03 - Programação Web PHP Arrays (Vetores)PW03 - Programação Web PHP Arrays (Vetores)
PW03 - Programação Web PHP Arrays (Vetores)Silvano Oliveira
 
Perl Moderno, dia5
Perl Moderno, dia5Perl Moderno, dia5
Perl Moderno, dia5garux
 
Programação web ii aulas 06 e 07
Programação web ii   aulas 06 e 07Programação web ii   aulas 06 e 07
Programação web ii aulas 06 e 07Yuri Bispo
 

Semelhante a Fugindo das armadilhas do MVC (20)

Curso de Introdução - PHP
Curso de Introdução - PHPCurso de Introdução - PHP
Curso de Introdução - PHP
 
Palestra de PDO
Palestra de PDOPalestra de PDO
Palestra de PDO
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
 
Bread board
Bread boardBread board
Bread board
 
Otimização e Escalabilidade
Otimização e EscalabilidadeOtimização e Escalabilidade
Otimização e Escalabilidade
 
Da Argila Ao Forte - Como desenvolver uma loja virtual
Da Argila Ao Forte - Como desenvolver uma loja virtualDa Argila Ao Forte - Como desenvolver uma loja virtual
Da Argila Ao Forte - Como desenvolver uma loja virtual
 
apostila.pdf
apostila.pdfapostila.pdf
apostila.pdf
 
Perl Moderno, dia3
Perl Moderno, dia3Perl Moderno, dia3
Perl Moderno, dia3
 
Introdução ao JQuery e AJAX
Introdução ao JQuery e AJAXIntrodução ao JQuery e AJAX
Introdução ao JQuery e AJAX
 
Zend Framework
Zend FrameworkZend Framework
Zend Framework
 
Xdebug: Seus problemas acabaram!
Xdebug: Seus problemas acabaram!Xdebug: Seus problemas acabaram!
Xdebug: Seus problemas acabaram!
 
Criando controle de acesso com php e my sql
Criando controle de acesso com php e my sqlCriando controle de acesso com php e my sql
Criando controle de acesso com php e my sql
 
PHP robusto com Zend Framework
PHP robusto com Zend FrameworkPHP robusto com Zend Framework
PHP robusto com Zend Framework
 
Programando com estilo e Performance
Programando com estilo e Performance Programando com estilo e Performance
Programando com estilo e Performance
 
Programando em PHP com Estilo
Programando  em PHP com EstiloProgramando  em PHP com Estilo
Programando em PHP com Estilo
 
Refactoring sem complicação!
Refactoring sem complicação!Refactoring sem complicação!
Refactoring sem complicação!
 
Orientação a Objetos em PHP
Orientação a Objetos em PHPOrientação a Objetos em PHP
Orientação a Objetos em PHP
 
PW03 - Programação Web PHP Arrays (Vetores)
PW03 - Programação Web PHP Arrays (Vetores)PW03 - Programação Web PHP Arrays (Vetores)
PW03 - Programação Web PHP Arrays (Vetores)
 
Perl Moderno, dia5
Perl Moderno, dia5Perl Moderno, dia5
Perl Moderno, dia5
 
Programação web ii aulas 06 e 07
Programação web ii   aulas 06 e 07Programação web ii   aulas 06 e 07
Programação web ii aulas 06 e 07
 

Fugindo das armadilhas do MVC

  • 3. OMVC A arquitetura foi desenvolvida para ser usado em projetos de interface visual Foi criado na década de 70 View Controller Model
  • 9. class Sayajin extends Model { protected $table = "dragon_ball_sayajin"; protected $primaryKey = "saya_jin_id"; public function obterSayajinPelaForca($nome, $poder) { $sayajin = $this->where('nome', '=', $nome)->where('poder', '=', $poder) ->join('mundo', 'mondo.id', '=', ‘dragon_ball_sayajin.cod_mundo')->first(); $dadosDoInimigos = $sayajin->inimigos; $inimigos = []; foreach ($dadosDoInimigos as $key => $value) { $inimigos[$key] = $value->toArray(); $geocode = new Geocode($value->endereco); $inimigos[$key]['lat'] = $geocode->lat(); $inimigos[$key]['long'] = $geocode->long(); }; $cabelos = "curto e preto"; if ($poder == 3) { $cabelos = "longos e loiro"; } $data = $sayajin->toArray(); $data['cabelos'] = $cabelos; return [ 'sayadin' => $data, 'inimigos' => $inimigos ];
  • 10. class Sayajin extends Model { protected $table = "dragon_ball_sayajin"; protected $primaryKey = "saya_jin_id"; public function obterSayajinPelaForca($nome, $poder) { $sayajin = $this->where('nome', '=', $nome)->where('poder', '=', $poder) ->join('mundo', 'mondo.id', '=', ‘dragon_ball_sayajin.cod_mundo')->first(); $dadosDoInimigos = $sayajin->inimigos; $inimigos = []; foreach ($dadosDoInimigos as $key => $value) { $inimigos[$key] = $value->toArray(); $geocode = new Geocode($value->endereco); $inimigos[$key]['lat'] = $geocode->lat(); $inimigos[$key]['long'] = $geocode->long(); }; $cabelos = "curto e preto"; if ($poder == 3) { $cabelos = "longos e loiro"; } $data = $sayajin->toArray(); $data['cabelos'] = $cabelos; return [ 'sayadin' => $data, 'inimigos' => $inimigos ];
  • 11. class Sayajin extends Model { protected $table = "dragon_ball_sayajin"; protected $primaryKey = "saya_jin_id"; public function obterSayajinPelaForca($nome, $poder) { $sayajin = $this->where('nome', '=', $nome)->where('poder', '=', $poder) ->join('mundo', 'mondo.id', '=', ‘dragon_ball_sayajin.cod_mundo')->first(); $dadosDoInimigos = $sayajin->inimigos; $inimigos = []; foreach ($dadosDoInimigos as $key => $value) { $inimigos[$key] = $value->toArray(); $geocode = new Geocode($value->endereco); $inimigos[$key]['lat'] = $geocode->lat(); $inimigos[$key]['long'] = $geocode->long(); }; $cabelos = "curto e preto"; if ($poder == 3) { $cabelos = "longos e loiro"; } $data = $sayajin->toArray(); $data['cabelos'] = $cabelos; return [ 'sayadin' => $data, 'inimigos' => $inimigos ];
  • 12. class Sayajin extends Model { protected $table = "dragon_ball_sayajin"; protected $primaryKey = "saya_jin_id"; public function obterSayajinPelaForca($nome, $poder) { $sayajin = $this->where('nome', '=', $nome)->where('poder', '=', $poder) ->join('mundo', 'mondo.id', '=', ‘dragon_ball_sayajin.cod_mundo')->first(); $dadosDoInimigos = $sayajin->inimigos; $inimigos = []; foreach ($dadosDoInimigos as $key => $value) { $inimigos[$key] = $value->toArray(); $geocode = new Geocode($value->endereco); $inimigos[$key]['lat'] = $geocode->lat(); $inimigos[$key]['long'] = $geocode->long(); }; $cabelos = "curto e preto"; if ($poder == 3) { $cabelos = "longos e loiro"; } $data = $sayajin->toArray(); $data['cabelos'] = $cabelos; return [ 'sayadin' => $data, 'inimigos' => $inimigos ];
  • 15. Benefíciosdessa Abordagem Fica entre os controller e as models Essa camada ficará responsável pela implementação da Regra de negócio Essa camada também ficará responsável em se comunicar com outros serviços
  • 16. class SayajinService { public function obterSayajinPelaForca($nome, $poder) { $sayajin = Sayajin::where('nome', '=', $nome) ->where('poder', '=', $poder) ->join('mundo', 'id', '=', 'dragon_ball_sayajin.cod_mundo') ->first(); $dadosDoInimigos = $sayajin->inimigos; $inimigos = []; foreach ($dadosDoInimigos as $key => $value) { $inimigos[$key] = $value->toArray(); $geocode = new Geocode($inimigos['endereco']); $inimigos[$key][‘lat'] = $geocode->lat(); $inimigos[$key]['long'] = $geocode->long(); }; $cabelos = "curto e preto"; if ($poder == 3) { $cabelos = "longos e loiro"; } $data = $sayajin->toArray(); $data['cabelos'] = $cabelos; return [ 'sayajin' => $data, 'inimigos' => $inimigos ]; }
  • 17. class SayajinService { public function obterSayajinPelaForca($nome, $poder) { $sayajin = Sayajin::where('nome', '=', $nome) ->where('poder', '=', $poder) ->join('mundo', 'id', '=', 'dragon_ball_sayajin.cod_mundo') ->first(); $dadosDoInimigos = $sayajin->inimigos; $inimigos = []; foreach ($dadosDoInimigos as $key => $value) { $inimigos[$key] = $value->toArray(); $geocode = new Geocode($inimigos['endereco']); $inimigos[$key][‘lat'] = $geocode->lat(); $inimigos[$key]['long'] = $geocode->long(); }; $cabelos = "curto e preto"; if ($poder == 3) { $cabelos = "longos e loiro"; } $data = $sayajin->toArray(); $data['cabelos'] = $cabelos; return [ 'sayajin' => $data, 'inimigos' => $inimigos ]; } class Sayajin extends Model { protected $table = "dragon_ball_sayajin"; protected $primaryKey = "saya_jin_id"; public function inimigos() { return $this->hasMany('Inimigos'); } }
  • 19. class SayajinService { public function obterSayajinPelaForca($nome, $poder) { $sayajin = Sayajin::where('nome', '=', $nome) ->where('poder', '=', $poder) ->join('mundo', 'id', '=', 'dragon_ball_sayajin.cod_mundo') ->first(); $dadosDoInimigos = $sayajin->inimigos; $inimigos = []; foreach ($dadosDoInimigos as $key => $value) { $inimigos[$key] = $value->toArray(); $geocode = new Geocode($inimigos['endereco']); $inimigos[$key][‘lat'] = $geocode->lat(); $inimigos[$key]['long'] = $geocode->long(); }; $cabelos = "curto e preto"; if ($poder == 3) { $cabelos = "longos e loiro"; } $data = $sayajin->toArray(); $data['cabelos'] = $cabelos; return [ 'sayajin' => $data, 'inimigos' => $inimigos ]; } class Sayajin extends Model { protected $table = "dragon_ball_sayajin"; protected $primaryKey = "saya_jin_id"; public function inimigos() { return $this->hasMany('Inimigos'); } }
  • 20. class SayajinService { public function obterSayajinPelaForca($nome, $poder) { $sayajin = Sayajin::where('nome', '=', $nome) ->where('poder', '=', $poder) ->join('mundo', 'id', '=', 'dragon_ball_sayajin.cod_mundo') ->first(); $dadosDoInimigos = $sayajin->inimigos; $inimigos = []; foreach ($dadosDoInimigos as $key => $value) { $inimigos[$key] = $value->toArray(); $geocode = new Geocode($inimigos['endereco']); $inimigos[$key][‘lat'] = $geocode->lat(); $inimigos[$key]['long'] = $geocode->long(); }; $cabelos = "curto e preto"; if ($poder == 3) { $cabelos = "longos e loiro"; } $data = $sayajin->toArray(); $data['cabelos'] = $cabelos; return [ 'sayajin' => $data, 'inimigos' => $inimigos ]; } class Sayajin extends Model { protected $table = "dragon_ball_sayajin"; protected $primaryKey = "saya_jin_id"; public function inimigos() { return $this->hasMany('Inimigos'); } }
  • 22. Benefíciosdessa Abordagem Definir uma camada unica de acesso aos dados Apoia o modelo fornecendo a persistência e leitura dos dados Elimina as consultas da camada de negócio Separa claramente a comunicação com o banco de sua manipulação Pode entregar qualquer modelo para os serviço
  • 23. class SayajinRepository { public function obterSayajin($params) { $sayajin = Sayajin::where('nome', '=', $params['nome']) ->where('poder', '=', $params['poder']) ->join('mundo', 'mondo.id', '=', 'dragon_ball_sayajin.cod_mundo') ->first(); $dadosDoInimigos = $sayajin->inimigos; return [ 'sayajin' => $sayajin->toArray(), 'inimigos' => $dadosDoInimigos->toArray(), ] } }
  • 24. class SayajinService { private $repositorio public function __construct(SayajinRepository $repositorio) { $this->repositorio = $repositorio; } public function obterSayajinPelaForca($nome, $poder) { $sayajin = $this->repositorio->obterSayajin( ['nome' => $nome,'poder' => $poder] ); $inimigos = array_map(function($value){ $geocode = new Geocode($value['endereco']); $value['lat'] = $geocode->lat(); $value['long'] = $geocode->long(); return $inimigos; }, $sayajin['inimigos']); $cabelos = "curto e preto"; if ($poder == 3) { $cabelos = "longos e loiro"; } $sayajin['cabelos'] = $cabelos; return [ 'sayadin' => $sayajin, 'inimigos' => $inimigos
  • 27. Desacopleaindamais IoC - Containers e DI Arquitetura Hexagonal ExpressiveFiquem de olho