Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
Roteiro
●

Introdução
–

Apresentação;

–

Bibliotecas para relatórios:
●

–

Bibliotecas para gráficos:
●

–

JPGraph, pC...
Apresentação
●

Clipper (1994-1998): comercial, bibliotecas, funções;

●

Delphi (1998-1999): automação, componentes;

●

...
Objetivo
●

O que não queremos:
–
–

●

Não queremos mini-curso de geração de relatórios;
Provavelmente a maioria já conhe...
Bibliotecas para relatórios
Relatórios em XLS
●

Bom para:
–
–

●

Relatórios tabulares (linhas, colunas);
Permite formatações, totalizações.

Spreads...
Relatórios em XLS
<?php
require_once 'Spreadsheet/Excel/Writer.php';
$workbook = new Spreadsheet_Excel_Writer('test.xls');...
Relatórios em XLS
<?php
require_once 'Spreadsheet/Excel/Writer.php';
$workbook = new Spreadsheet_Excel_Writer('test2.xls')...
Relatórios em PDF
●

Bom para:
–
–

Documentos (NFE, atestados, diplomas);

–
●

Quase qualquer coisa, relatórios tabulare...
Relatórios em PDF
<?php
require('fpdf/fpdf.php');
$pdf = new FPDF('P', 'pt', 'A4');
$pdf->AddPage();
$pdf->SetFont('Courie...
Relatórios em PDF
<?php
require('fpdf/fpdf.php');
$pdf = new FPDF('P', 'pt', 'A4');
$pdf->AddPage();
$pdf->SetFont('Arial'...
Relatórios em RTF
●

Bom para:
–
–

Documentos editáveis (contratos, cartas);

–

Trabalha com escrita de elementos de tex...
Relatórios em RTF
<?php
require 'PHPRtfLite/lib/PHPRtfLite.php';
PHPRtfLite::registerAutoloader();
$rtf = new PHPRtfLite;
...
Relatórios em RTF

Adianti Solutions Ltda © Pablo Dall'Oglio

Criando Relatórios com PHP

#14
Relatórios em RTF
<?php
require '...';
$dados
= array();
$dados[] = array( 1, 'Brazil', 'Ayrton Senna', 90);
$dados[] = ar...
Relatórios em RTF

Adianti Solutions Ltda © Pablo Dall'Oglio

Criando Relatórios com PHP

#16
Bibliotecas para gráficos
Gráficos
●

Algumas opções:
–

JpGraph (http://jpgraph.net/) - não ativa;
●

●

–

325Kb para gráfico de linhas, barras e ...
Gráficos com jpGraph
<?php
require_once ('jpgraph/src/jpgraph.php');
require_once ('jpgraph/src/jpgraph_line.php');
$dados...
Gráficos com jpGraph
<?php
require_once ('jpgraph/src/jpgraph.php');
require_once ('jpgraph/src/jpgraph_bar.php');
$dados ...
Gráficos com pChart
<?php
include 'pChart/class/pData.class.php';
// + pDraw e pImage
$dados = new pData;
$dados->addPoint...
Gráficos com pChart

Adianti Solutions Ltda © Pablo Dall'Oglio

Criando Relatórios com PHP

#22
Evolução
●

As bibliotecas evoluem constantemente;

●

Novas tecnologias surgem;

●

Nosso código não deve referenciar a b...
Acoplamento
Acoplamento
●

●

●

O acoplamento é quanto
um módulo (classe,
método) conhece e
depende de outro;
O objetivo é criar mode...
Acoplamento
●

É impossível criar um sistema com 0% de acoplamento.

●

Uma classe com BAIXO acoplamento:
–
–

●

Não depe...
Acoplamento
●

Acoplamento concreto:
–

RelatorioControl e FPDF estão fortemente acopladas;

–

RelatorioControl conhece m...
Acoplamento
●

●

●

●

●

Mas existem outra formas de dependências...
O objeto A envie uma mensagem para o objeto B sem t...
Acoplamento
Realização
<?php
interface IGenerator
{
function addPage();
function setFontColor($color);
function writeText(...
Acoplamento
Uso
<?php
class RelatorioControl
{
public function onGenerate(IGenerator $gen)
{
$gen->addPage();
$gen->setFon...
Acoplamento
●

●

Uma forma de diminuir o acoplamento é criando um
facade;
Oferece uma interface única para um conjunto de...
Acoplamento
<?php
class GraficoLinhas
{
public function __construct()
{
include 'class/pData.class.php';
include 'class/pI...
Implementações
Implementações
●

As interfaces das bibliotecas:
– PDF;
–
–

●

RTF;
HTML.

São muito diferentes entre si:
–

RTF é texto ...
Strategy
●

Permite a seleção de algoritmos durante a execução do sw;

●

Fornece um meio de declarar uma família de algor...
Table Writer's
●

Escritor de relatórios definido pela classe da esquerda;

contexto

Adianti Solutions Ltda © Pablo Dall'...
Table Writer's
<?php
// inclui as bibliotecas...
require_once 'app.reports/ITableWriter.iface.php';
$widths = array(70, 15...
Table Writer's
<?php
require_once 'app.reports/ITableWriter.iface.php';
// ...

Implementação

$widths = array(70, 150, 15...
Bridge
●

Separa uma abstração de sua implementação;

●

As duas podem variar de maneira independente;

●

Usa encapsulame...
Jeito tosco
●

Proliferação de níveis. Estrutura não-flexível;

●

Alto grau de acoplamento. O cliente especifica a classe...
Bridge
<?php
require_once 'app.reports/TChart.class.php';
require_once 'app.reports/TBarChart.class.php';
require_once 'ap...
Bridge
<?php
require_once 'app.reports/TChart.class.php';
require_once 'app.reports/TBarChart.class.php';
require_once 'ap...
Obrigado
●

Livro
–

●

Adianti Framework:
–

●

www.adianti.com.br/bkrpt
www.adianti.com.br/framework

Contato:
–

–

@pa...
Criando relatórios com PHP - PHP Conference Brasil 2013
Criando relatórios com PHP - PHP Conference Brasil 2013
Nächste SlideShare
Wird geladen in …5
×

Criando relatórios com PHP - PHP Conference Brasil 2013

10.726 Aufrufe

Veröffentlicht am

Veröffentlicht in: Technologie

Criando relatórios com PHP - PHP Conference Brasil 2013

  1. 1. Roteiro ● Introdução – Apresentação; – Bibliotecas para relatórios: ● – Bibliotecas para gráficos: ● – JPGraph, pChart; Desacoplamento: ● – XLS, PDF, RTF; A importância de desacoplar; Implementação: ● Strategy para relatórios; ● Bridge para gráficos. Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #2
  2. 2. Apresentação ● Clipper (1994-1998): comercial, bibliotecas, funções; ● Delphi (1998-1999): automação, componentes; ● PHP (2000): SAGU (php+html+sql) ● PHP-GTK(2001): PHP só com classes; ● Agata Report (2001-2006); ● Design Patterns (2004): Aprendizado na Unisinos; ● PHP: Criando Aplicações Gráficas com PHP (2004); ● PHP: Programando com Orientação a Objetos (2007); ● Criando Relatórios com PHP (2011); ● Adianti Framework para PHP (2012). Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #3
  3. 3. Objetivo ● O que não queremos: – – ● Não queremos mini-curso de geração de relatórios; Provavelmente a maioria já conhece bem uma biblioteca; O que queremos: – Explorar várias bibliotecas e suas principais características; – Analisar boas formas de integrá-las em nossa aplicação; – Estudar padrões de projeto que podem ser utilizados para isso. Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #4
  4. 4. Bibliotecas para relatórios
  5. 5. Relatórios em XLS ● Bom para: – – ● Relatórios tabulares (linhas, colunas); Permite formatações, totalizações. Spreadsheet Writer (304 Kb): – – Pequeno, funciona bem, mas sem novos releases; – ● http://pear.php.net/package/Spreadsheet_Excel_Writer Depende do pacote OLE, não gera XLSX (só XLS - BIFF). PHPExcel (4.3 Mb): – http://phpexcel.codeplex.com – Bastante ativo, maior, com muitas funcionalidades; – Trabalha com Open XML (XLSX). Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #6
  6. 6. Relatórios em XLS <?php require_once 'Spreadsheet/Excel/Writer.php'; $workbook = new Spreadsheet_Excel_Writer('test.xls'); // Cria uma planilha $worksheet = $workbook->addWorksheet('My first worksheet'); // escreve os dados $worksheet->write(0, $worksheet->write(0, $worksheet->write(1, $worksheet->write(1, $worksheet->write(2, $worksheet->write(2, $worksheet->write(3, $worksheet->write(3, 0, 1, 0, 1, 0, 1, 0, 1, 'Nome'); 'Idade'); 'Maria'); 30); 'Joao'); 31); 'Mariana'); 32); // Finaliza, gravando $workbook->close(); ?> Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #7
  7. 7. Relatórios em XLS <?php require_once 'Spreadsheet/Excel/Writer.php'; $workbook = new Spreadsheet_Excel_Writer('test2.xls'); $formato_bold = $workbook->addFormat(); $formato_bold->setBold(); $formato_title = $workbook->addFormat(); $formato_title->setBold(); $formato_title->setColor('white'); $formato_title->setPattern(1); $formato_title->setFgColor('gray'); $worksheet = $workbook->addWorksheet(); $worksheet->write(0, 0, "Titulo", $formato_title); $worksheet->write(1, 0, "Coluna 1", $formato_bold); $worksheet->write(1, 1, "Coluna 2", $formato_bold); $workbook->close(); ?> Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #8
  8. 8. Relatórios em PDF ● Bom para: – – Documentos (NFE, atestados, diplomas); – ● Quase qualquer coisa, relatórios tabulares; Posicionamento fixo dos objetos. FPDF (46k fpdf.php): – ● TCPDF (864k tcpdf.php): – ● http://www.fpdf.org (Bom, pequena, mas não ativa); http://www.tcpdf.org/ (Ativa, Grande, milhões de funcionalidades, baseada na FPDF, chars, codabar, forms); MPDF (1.3 Mb mpdf.php): – http://www.mpdf1.com/ (Ativa, Grande, Gera PDF baseado em HTML, boa com tables e formatações, FPDF based); Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #9
  9. 9. Relatórios em PDF <?php require('fpdf/fpdf.php'); $pdf = new FPDF('P', 'pt', 'A4'); $pdf->AddPage(); $pdf->SetFont('Courier', 'B', 16); $pdf->SetTextColor(50, 50, 100); $pdf->SetY(70); $pdf->SetX(260); // não desloca o cursor $pdf->Write(30, 'Titulo'); $pdf->Ln(30); // Espaçamento $txt = str_repeat('write ', 30); $pdf->SetX(200); // altera a posição X $pdf->SetTextColor(100, 50, 50); // tom de vermelho $pdf->SetFont('Times', 'B', 14); $pdf->Write(20, $txt); $pdf->Output('test.pdf'); ?> Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #10
  10. 10. Relatórios em PDF <?php require('fpdf/fpdf.php'); $pdf = new FPDF('P', 'pt', 'A4'); $pdf->AddPage(); $pdf->SetFont('Arial','B',16); $pdf->Cell(510, 20, 'Titulo com borda', 1, 1, 'C'); $pdf->Ln(20); $pdf->SetFillColor(255,120,120); $pdf->Cell(170, 30,'Alinhado a esquerda', 1, 0, 'L', TRUE); $pdf->SetFillColor(170,255,120); $pdf->Cell(170, 30,'Alinhado ao centro', 1, 0, 'C', TRUE); $pdf->SetFillColor(100,100,255); $pdf->Cell(170, 30,'Alinhado a direita', 1, 1, 'R', TRUE); $pdf->Output('test2.pdf'); ?> Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #11
  11. 11. Relatórios em RTF ● Bom para: – – Documentos editáveis (contratos, cartas); – Trabalha com escrita de elementos de texto e tabelas; – ● Relatórios tabulares; Abre bem no Word e LibreOffice. PhpRtfLite(372 Kb): – sf.net/projects/phprtf/ – Pequeno; – Funciona bem; – Ativa. Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #12
  12. 12. Relatórios em RTF <?php require 'PHPRtfLite/lib/PHPRtfLite.php'; PHPRtfLite::registerAutoloader(); $rtf = new PHPRtfLite; $secao = $rtf->addSection(); // adiciona seção $fontTitulo = new PHPRtfLite_Font(16, 'Arial'); $fontTitulo->setBold(); $fontTitulo->setUnderline(); $secao->writeText('Título', $fontTitulo, new PHPRtfLite_ParFormat('center')); $texto = 'Texto c/<b>negrito</b>,<i>italico</i>, <u>sublinhado</u>. '; $secao->writeText(str_repeat($texto, 12), new PHPRtfLite_Font(12), new PHPRtfLite_ParFormat('justify')); $rtf->save('test.rtf'); ?> Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #13
  13. 13. Relatórios em RTF Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #14
  14. 14. Relatórios em RTF <?php require '...'; $dados = array(); $dados[] = array( 1, 'Brazil', 'Ayrton Senna', 90); $dados[] = array( 2, 'France', 'Alain Prost', 87); // ... $rtf = new PHPRtfLite; $table = $rtf->addSection()->addTable(); $table->addColumn(3); // larguras $table->addColumn(5); // ... $row = 1; foreach($dados as $linha) { $table->addRow(0.5); $col = 1; foreach ($linha as $coluna) { $table->writeToCell($row, $col, $coluna, $fonte, ...); $col++; } $row ++; } $rtf->save('test2.rtf'); ?> Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #15
  15. 15. Relatórios em RTF Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #16
  16. 16. Bibliotecas para gráficos
  17. 17. Gráficos ● Algumas opções: – JpGraph (http://jpgraph.net/) - não ativa; ● ● – 325Kb para gráfico de linhas, barras e pizza; Interface das classes mais clean; PChart (http://www.pchart.net/) - não ativa; ● 692Kb no total. ● Interface mais fragmentada, gráficos mais bonitos; ● Geração em formato de imagem em desuso (HTML5, canvas); ● Outras opções: – Highcharts (http://www.highcharts.com/); – PHPChart (http://phpchart.net/). Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #18
  18. 18. Gráficos com jpGraph <?php require_once ('jpgraph/src/jpgraph.php'); require_once ('jpgraph/src/jpgraph_line.php'); $dados = array(100, 300, 200, 500, 200, 400, 300); $graph = new Graph(400,250); $graph->SetScale('textlin'); $graph->SetMargin(40,20,40,40); $graph->title->Set('Título do gráfico'); // Cria uma plotagem linear $lineplot = new LinePlot($dados); $lineplot->SetColor( 'maroon' ); $lineplot->SetWeight( 2 ); // espessura $lineplot->mark->SetType(MARK_FILLEDCIRCLE); $lineplot->mark->SetColor('blue'); $lineplot->mark->SetFillColor('red'); $lineplot->value->Show(); $graph->Add($lineplot); // adiciona a plotagem $graph->Stroke('j1.png'); ?> Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #19
  19. 19. Gráficos com jpGraph <?php require_once ('jpgraph/src/jpgraph.php'); require_once ('jpgraph/src/jpgraph_bar.php'); $dados = array(120,80,170,40,100); $graph = new Graph(400,250); $graph->SetScale("textlin"); $graph->SetMargin(40,20,40,40); $graph->title->Set('Vendas por mes'); $barplot = new BarPlot($dados); $barplot->SetFillColor('orange'); $barplot->value->Show(); $barplot->value->SetColor("blue"); $graph->Add($barplot); $graph->Stroke('j2.png'); ?> Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #20
  20. 20. Gráficos com pChart <?php include 'pChart/class/pData.class.php'; // + pDraw e pImage $dados = new pData; $dados->addPoints(array(23, 21, 14, 12, 8, 6),'Chile'); $dados->addPoints(array( 4, 10, 12, 14, 20, 23),'Canadá'); $dados->addPoints(array('Janeiro','Fevereiro','Março',...); $dados->setAbscissa('Meses'); $imagem = new pImage(700, 330, $dados); // borda $imagem->drawRectangle(0, 0, 699, 329,array('R'=>0,'G'=>0,'B'=>0)); $imagem->setFontProperties(array('FontName'=>'verdana',...)); $imagem->setGraphArea(60,40,650,280); $scaleSettings = array('XMargin'=>10,'YMargin'=>10); $imagem->drawScale($scaleSettings); // escala $imagem->drawLineChart(array('DisplayValues'=>TRUE)); $imagem->render('c1.png'); ?> Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #21
  21. 21. Gráficos com pChart Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #22
  22. 22. Evolução ● As bibliotecas evoluem constantemente; ● Novas tecnologias surgem; ● Nosso código não deve referenciar a biblioteca utilizada; ● Devemos separar nosso código do código de terceiros; ● Isso tudo, para facilitar o reuso e a evolução. Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #23
  23. 23. Acoplamento
  24. 24. Acoplamento ● ● ● O acoplamento é quanto um módulo (classe, método) conhece e depende de outro; O objetivo é criar modelos com baixo acoplamento; O alto acoplamento diminui a reusabilidade de objetos porque objetos não podem ser usados sozinhos. Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #25
  25. 25. Acoplamento ● É impossível criar um sistema com 0% de acoplamento. ● Uma classe com BAIXO acoplamento: – – ● Não depende de muitas outras e facilita a manutenção; Evita que as modificações produzam efeitos colaterais; Uma classe com ALTO acoplamento: – É menos inteligível isoladamente e menos reutilizável; – É mais sensível a mudanças nas classes da qual ela depende. Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #26
  26. 26. Acoplamento ● Acoplamento concreto: – RelatorioControl e FPDF estão fortemente acopladas; – RelatorioControl conhece muito sobre FPDF. <?php class RelatorioControl { public function onGenerate() { $pdf = new FPDF('P', 'pt', 'A4'); $pdf->AddPage(); $pdf->SetFont('Courier', 'B', 16); $pdf->SetTextColor(50, 50, 100); $pdf->SetY(70); $pdf->SetX(260); $pdf->Write(30, 'Titulo'); $pdf->Output('test.pdf'); } } ?> Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #27
  27. 27. Acoplamento ● ● ● ● ● Mas existem outra formas de dependências... O objeto A envie uma mensagem para o objeto B sem ter conhecimento da verdadeira classe desse último; Essa forma de dependência corresponde ao que chamamos de acoplamento abstrato; A acoplamento abstrato é preferível ao concreto. Classes abstratas e interfaces permitem implementar o acoplamento abstrato. Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #28
  28. 28. Acoplamento Realização <?php interface IGenerator { function addPage(); function setFontColor($color); function writeText($height, $text); function setFontFace($font, $style, $size); function saveFile($path); } class PDFGenerator implements IGenerator { //... } class RTFGenerator implements IGenerator { //... } ?> Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #29
  29. 29. Acoplamento Uso <?php class RelatorioControl { public function onGenerate(IGenerator $gen) { $gen->addPage(); $gen->setFontFace('Courier', 'B', 16); $gen->setFontColor('#FF0000'); $gen->writeText(30, 'Titulo'); $gen->saveFile('test.pdf'); } } ?> Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #30
  30. 30. Acoplamento ● ● Uma forma de diminuir o acoplamento é criando um facade; Oferece uma interface única para um conjunto de interfaces de um subsistema. Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #31
  31. 31. Acoplamento <?php class GraficoLinhas { public function __construct() { include 'class/pData.class.php'; include 'class/pImage.class.php'; } Mas e se quiséssemos Tornar a biblioteca Intercambiável? public function addSerie($legend, $data) … public function setTitle($title, $font) … public function draw() … } ?> Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #32
  32. 32. Implementações
  33. 33. Implementações ● As interfaces das bibliotecas: – PDF; – – ● RTF; HTML. São muito diferentes entre si: – RTF é texto fluído; – PDF é por posicionamento fixo; – HTML é por marcação. ● Para usar todas elas de maneira intercalada... ● É necessário criar uma camada de compatibilização. Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #34
  34. 34. Strategy ● Permite a seleção de algoritmos durante a execução do sw; ● Fornece um meio de declarar uma família de algoritmos; ● ● Permite encapsular estes algoritmos como um objeto, e torná-los intercambiáveis; Evita-se a criação de mega-classes com N métodos. Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #35
  35. 35. Table Writer's ● Escritor de relatórios definido pela classe da esquerda; contexto Adianti Solutions Ltda © Pablo Dall'Oglio implementação Criando Relatórios com PHP #36
  36. 36. Table Writer's <?php // inclui as bibliotecas... require_once 'app.reports/ITableWriter.iface.php'; $widths = array(70, 150, 150, 100); $tr = new TTableWriterPDF($widths); $tr->addStyle('title', 'Arial', '10', 'B', '#ffffff', '#737373'); $tr->addStyle('data', 'Arial', '10', '', '#000000', '#ffffff'); $tr->addRow(); $tr->addCell('Código', 'left', 'title'); $tr->addCell('Nome', 'left', 'title'); $tr->addRow(); $tr->addCell('001', 'left', $tr->addCell('Ayrton Senna da Silva', 'left', 'data'); 'data'); $tr->addRow(); // ... $tr->save("saida1.pdf"); // salva ?> Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #37
  37. 37. Table Writer's <?php require_once 'app.reports/ITableWriter.iface.php'; // ... Implementação $widths = array(70, 150, 150, 100); $tr = new TTableWriterPDF($widths); // cria os estilos $tr->addStyle('title', 'Arial', '12', 'B', '#ffffff', '#733131'); // atribui o escritor ao relatório $sr = new TSimpleReport; $sr->setReportWritter($tr); Contexto // adiciona as colunas do relatório $sr->addColumn('id', 'Código', 'center'); $sr->addColumn('nome', 'Nome', 'left'); // define o banco de dados e a consulta $sr->setDatabase('exemplos'); $sr->setQuery('SELECT id, nome, telefone, endereco from ...'); $sr->generate(); // gera o relatório $sr->save('saida4.pdf'); ?> Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #38
  38. 38. Bridge ● Separa uma abstração de sua implementação; ● As duas podem variar de maneira independente; ● Usa encapsulamento, agregação e herança para separar responsabilidades. Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #39
  39. 39. Jeito tosco ● Proliferação de níveis. Estrutura não-flexível; ● Alto grau de acoplamento. O cliente especifica a classe; ● Quantas novas classes para novo tipo de gráfico (gauge)? Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #40
  40. 40. Bridge <?php require_once 'app.reports/TChart.class.php'; require_once 'app.reports/TBarChart.class.php'; require_once 'app.reports/TPieChart.class.php'; // ... $data['maria'] = array( 1, 2, 3, 4, 5, 6, 7); $data['pedro'] = array(12, 3, 12, 4, 12, 4, 2); $data['joao'] = array( 9, 8, 7, 6, 5, 4, 3); $chart = new TBarChart(new TPChartDesigner); $chart->setTitle('Título do gráfico', NULL, NULL); $chart->setSize(500, 300); $chart->setXLabels(array('a', 'b', 'c', 'd', 'e', 'f', 'g')); $chart->setYLabel('label do eixo Y'); $chart->setOutputPath('tmp/teste.png'); $chart->addData('maria', $data['maria']); $chart->addData('pedro', $data['pedro']); $chart->addData('joao', $data['joao']); $chart->generate(); ?> Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #42
  41. 41. Bridge <?php require_once 'app.reports/TChart.class.php'; require_once 'app.reports/TBarChart.class.php'; require_once 'app.reports/TPieChart.class.php'; // ... // cria um gráfico de pizza usando a JPGraph $chart = new TPieChart(new TJPGraphDesigner); $chart->setTitle('Título do gráfico', NULL, NULL); $chart->setSize(500, 300); $chart->setOutputPath('tmp/teste2.png'); $chart->addData('maria', 40); $chart->addData('pedro', 30); $chart->addData('joao', 30); $chart->generate(); ?> Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #43
  42. 42. Obrigado ● Livro – ● Adianti Framework: – ● www.adianti.com.br/bkrpt www.adianti.com.br/framework Contato: – – @pablodalloglio – ● www.dalloglio.net fb.com/pablodalloglio Não esquecer de falar do Sorteio! Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #44

×