Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Essa é uma implementação válida do Chain of Responsability?

/**
 * Classe utilizada para gerenciar a ordem da Chain of Reponsability
 */
class EscritorExcel
{
    private $dados;
    private $indices;
    private $titulos;
    private $arquivo;

    public function __construct(array $dados, array $indices, array $titulos)
    {
        $this->dados = $dados;
        $this->indices = $indices;
        $this->titulos = $titulos;
    }

    public function setArquivo($arquivo) {
        $this->arquivo = $arquivo;
    }

    public function escrever($formato) {
        $escritor = new ExcelResultadoHtmlWriter($this->arquivo, new ExcelCsvWriter($this->arquivo));
        $escritor->writeArray($this->dados, $this->indices, $this->titulos, $formato);
    }
}

abstract class ExcelWriter
{
    protected $arquivo;

    public function __construct($arquivo, ExcelWriter $proximo = null)
    {
        $this->arquivo = $arquivo;
        $this->proximo = $proximo;
    }

    public abstract function writeArray(array $dados, array $indices, array $titulos, $formato);
}

class ExcelCsvWriter extends ExcelWriter
{
    public function writeArray(array $dados, array $indices, array $titulos, $formato)
    {
        if ($formato == 'csv') {
            // Formata os $dados, utilizando os $indices o array, e adiciona os $titulos
        } else {
            $this->proximo->writeArray($dados, $indices, $titulos, $formato);
        }
    }
}

class ExcelResultadoHtmlWriter extends ExcelWriter
{
    public function writeArray(array $dados, array $indices, array $titulos, $formato)
    {
        if ($formato == 'html') {
           // Formata os $dados, utilizando os $indices o array, e adiciona os $titulos
        } else {
            $this->proximo->writeArray($dados, $indices, $titulos, $formato);
        }
    }
}

E para utilizar:

$writer = new EscritorExcel($resultados, $indicesDeResultado, $titulos);
$writer->setArquivo($arquivo);
$writer->escrever('html'); // ou $writer->escrever('csv');

Esta implementação é uma Chain of Responsability?

2 respostas
solução!

Opa Carlos, é sim :). Mandou bem na abstração do que foi ensinado!

:-D

Implementei no trabalho aí queria confirmar. Obrigado!!!