Ir para conteúdo

ppanetony

Members
  • Total de itens

    17
  • Registro em

  • Última visita

Reputação

0 Comum

Sobre ppanetony

  1. ppanetony

    Design Pattern Builder - Qual utilidade real?!

    Obrigado, @Gabriel Heming... Eu fiz uma nova implementação conforme abaixo... Também não sei se está certo... Acho que está... Não consigo entender o motivo desse padrão... <?php //Builder abstract class BuilderCriadorDeGuerreiro { public $guerreiro; public abstract function ComEspada(); public abstract function ComArmadura(); public abstract function ComArco(); } //ConcreteBuilder class ConcreteBuilderCriadorDeGuerreiroFuturista extends BuilderCriadorDeGuerreiro { public function __construct() { $this->guerreiro = new ProductGuerreiroFuturista(); } public function ComEspada() { $this->guerreiro->EscolherEspada('espada futurista'); } public function ComArmadura() { $this->guerreiro->ColocarArmadura('armadura futurista'); } public function ComArco() { $this->guerreiro->EscolherArco('arco futurista'); } public function ObterGuerreiro() { return $this->guerreiro; } } //ConcreteBuilder class ConcreteBuilderCriadorDeGuerreiroMedieval extends BuilderCriadorDeGuerreiro { public function __construct() { $this->guerreiro = new ProductGuerreiroMedieval(); } public function ComEspada() { $this->guerreiro->EscolherEspada('espada medieval'); } public function ComArmadura() { $this->guerreiro->ColocarArmadura('armadura medieval'); } public function ComArco() { $this->guerreiro->EscolherArco('arco medieval'); } public function ObterGuerreiro() { return $this->guerreiro; } } //Director class DirectorExercito { public function ConstruirGuerreiro(BuilderCriadorDeGuerreiro $builderCriadorDeGuerreiro) { $builderCriadorDeGuerreiro->ComEspada(); $builderCriadorDeGuerreiro->ComArmadura(); $builderCriadorDeGuerreiro->ComArco(); } } //Product class ProductGuerreiroMedieval extends Guerreiro { public function EscolherEspada(string $espada) { $this->espada = $espada; } public function ColocarArmadura(string $armadura) { $this->armadura = $armadura; } public function EscolherArco(string $arco) { $this->arco = $arco; } } //Product class ProductGuerreiroFuturista extends Guerreiro { public function EscolherEspada(string $espada) { $this->espada = $espada; } public function ColocarArmadura(string $armadura) { $this->armadura = $armadura; } public function EscolherArco(string $arco) { $this->arco = $arco; } } //Abstract Product //Não faz parte do Diagrama //Existe para ter dois tipos de guerreiro abstract class Guerreiro { public $espada; public $armadura; public $arco; public abstract function EscolherEspada(string $espada); public abstract function ColocarArmadura(string $armadura); public abstract function EscolherArco(string $arco); } class Program { private $directorExercito; private $builderCriadorDeGuerreiro; private $guerreiro; public function Main() { $this->directorExercito = new DirectorExercito(); $this->builderCriadorDeGuerreiro = new ConcreteBuilderCriadorDeGuerreiroMedieval(); $this->directorExercito->ConstruirGuerreiro($this->builderCriadorDeGuerreiro); $this->guerreiro = $this->builderCriadorDeGuerreiro->ObterGuerreiro(); echo 'GUERREIRO MEDIEVAL' . "\n"; echo $this->guerreiro->espada . ', ' . $this->guerreiro->armadura . ', ' . $this->guerreiro->arco . "\n\n"; echo 'GUERREIRO FUTURISTA' . "\n"; $this->builderCriadorDeGuerreiro = new ConcreteBuilderCriadorDeGuerreiroFuturista(); $this->directorExercito->ConstruirGuerreiro($this->builderCriadorDeGuerreiro); $this->guerreiro = $this->builderCriadorDeGuerreiro->ObterGuerreiro(); echo $this->guerreiro->espada . ', ' . $this->guerreiro->armadura . ', ' . $this->guerreiro->arco . "\n\n"; } } $program = (new Program())->Main();
  2. ppanetony

    Design Pattern Builder - Qual utilidade real?!

    Olá! Estou tentando entender a real utilidade do design pattern builder. Tentei implementar, conforme a imagem e código abaixo. Não sei se está correta a implementação. Se não estiver, como eu deveria implementar?! class Product { public function Salvar() { echo 'Salvar'; } } interface Builder { public function buildPart(); } class ConcreteBuilder implements Builder { private $product; public function buildPart() { $this->product = new Product(); } public function getResult() : Product { return $this->product; } } class Director { public function construct(Builder $builder) { $builder->buildPart(); } } Para usar o padrão builder, conforme o código acima, eu faço o seguinte echo "\n\n"; $director = new Director(); $concreteBuilder = new ConcreteBuilder(); $director->construct($concreteBuilder); $product = $concreteBuilder->getResult(); $product->Salvar(); Mas, para que todo esses códigos, se eu poderia simplesmente ter o código abaixo que funcionara da mesma maneira?! $product22 = new Product(); $product22->Salvar(); Enfim... Qual utilidade real do Design Pattern Builder ?!?!
  3. ppanetony

    expressão regular - ter somente até 3 caracteres na string...

    @Gabriel Heming, deu certo. Obrigado! Teria como limitar também a quantidade de de dígitos?! Tentei substituir o * da expressão por {8}, mas não deu certo... Qual é a lógica da expressão que você passou?! Não consegui compreender. Obrigado!
  4. Olá... Tem como numa expressão regular eu limitar a quantidade de vezes que aparece determinado caracter, estando ou nao na sequencia?! Exemplo: no texto 0123456789 só poderá ter no máximo 3 caracteres /. em qualquer parte do texto. (012/345/6/789 ou 01/23/456/789 ou 0123/45/67/89, etc...) obrigado.
  5. ppanetony

    Teste com PHPUnit

    Boa Tarde. Estou começando a usar o PHPUnit. Tenho uma static function para valida o numero do CPF retornando true ou false se o CPF for válido ou inválido, respectivamente. Usei essa static funcion para fazer os testes com o PHPUnit. O código abaixo está funcionando corretamente, mas gostaria de saber se ele está com muitos ou poucos testes, se os testes estão bem elaborados, o que pode ser melhorado, melhores práticas para a criação destes testes... Enfim... Quem puder opinar, agradeço muito! Não coloquei a static function que valida o cpf, para deixar o foco somente no código dos testes... Obrigado. <?php use PHPUnit\Framework\TestCase; use Validators\Documents as Cpf; const VALID_CPF_WITH_ONLY_DIGITS = '70996162003'; const VALID_CPF_WITH_FORMATTED_DIGITS = '709.961.620-03'; const INVALID_CPF_WITH_ONLY_DIGITS = '70996162002'; const INVALID_CPF_WITH_FORMATTED_DIGITS = '709.961.620-02'; const INVALID_CPF_WITH_ALL_DIGITS_EQUALS = '11111111111'; const INVALID_CPF_WITH_LESS_THAN_ELEVEN_DIGITS = '7099616200'; const INVALID_CPF_WITH_MORE_THAN_ELEVE_DIGITS = '709961620030'; final class ValidatorCpfTest extends TestCase { public function testIsValidCpfWithOnlyDigits() { $this->assertTrue(Cpf\ValidatorCpf::checkOver(VALID_CPF_WITH_ONLY_DIGITS)); } public function testIsValidCpfWithFormattedDigits() { $this->assertTrue(Cpf\ValidatorCpf::checkOver(VALID_CPF_WITH_FORMATTED_DIGITS)); } public function testIsNotValidCpfWithOnlyDigits() { $this->assertFalse(Cpf\ValidatorCpf::checkOver(INVALID_CPF_WITH_ONLY_DIGITS)); } public function testIsNotValidCpfWithFormattedDigits() { $this->assertFalse(Cpf\ValidatorCpf::checkOver(INVALID_CPF_WITH_FORMATTED_DIGITS)); } public function testInvalidCpfWithAllDigitsEquals() { $this->assertFalse(Cpf\ValidatorCpf::checkOver(INVALID_CPF_WITH_ALL_DIGITS_EQUALS)); } public function testInvalidCpfWithLessThanElevenDigits() { $this->assertFalse(Cpf\ValidatorCpf::checkOver(INVALID_CPF_WITH_LESS_THAN_ELEVEN_DIGITS)); } public function testInvalidCpfWithMoreThanEleveDigits() { $this->assertFalse(Cpf\ValidatorCpf::checkOver(INVALID_CPF_WITH_MORE_THAN_ELEVE_DIGITS)); } }
  6. ppanetony

    retorno validação entrada

    vixi... valeu pela ajudar... realmente nao consigo entender... DESISTO! programar nao é para mim não!!! já estava pensando em mudar de área mesmo...
  7. ppanetony

    retorno validação entrada

    obrigado... vou estou seu codigo agora mesmo! como você trata erros?!
  8. ppanetony

    retorno validação entrada

    valeu pela resposta... como seria isso?! não fica muito ruim ficar tratando tudo com try catch?! terei lugares com (acho) uns 30 try catch!!! e também não é objetivo interrompido o processo...
  9. ppanetony

    retorno validação entrada

    com um outro exemplo... só para exemplificar mesmo... class impostos { public $totalicms; public $totalipi; public function calclularImpostos($paricms1 = 0, $paricms2 = 0, $paripi1 = 0, $paripi2 = 0) { $icms = new icms; $this->totalicms = $icms->calcularIcms($paricms1, $paricms2); $ipi = new ipi; $this->totalipi = $ipi->calcularIpi($paripi1, $paripi2); } } class icms { public function calcularIcms($p1, $p2) { if ($p1 == 10) { throw new Exception('erro icms'); } return $p1 + $p2; } } class ipi { public function calcularIpi($p1, $p2) { if ($p1 == 10) { throw new Exception('erro ipi'); } return $p1 + $p2; } } ao invés de colocar exception, eu gostaria de colocar tipo um array, que fosse agrupando as msgs de erro de cada classe para a classe principal (impostos) mostrar os erros... não sei se é correto ou não... na verdade nem sei como fazer mesmo... estava pensando em passar para cada funcao o array de erros... mas ai fica bem estranho... valeu!
  10. ppanetony

    retorno validação entrada

    olá... como fazer para validar as entradas do usuário, considerando varias classes?! por exemplo a classe cliente e a classe endereco... a classe cliente valida se o nome foi preenchido e se o CPF é valido... a classe endereco valida se foi informado o CEP... como juntar as mensagens de validacao das duas classses, para apresentar de uma unica vez para o usuário?!
  11. ppanetony

    Api - Retorno de Erros/Validações

    É REST! Vi o link que você mandou e lá tem o seguinte código // Validate some input from the user, and it is invalid: $response = new ResponseError(ResponseError::STATUS_UNPROCESSABLE_ENTITY); $response->addMessage('first_name', 'is required'); $response->addMessage('telephone', 'should not exceed 12 characters'); $response->addMessage('telephone', 'is not in the correct format'); return $response; Minha dúvida é a seguinte... seguir o artigo para gerar o retorno para quem consome a api é uma boa prática?! Se sim, considerando o código acima (validação falhar para first_name e telephone) eu devo retornar as 3 mensagens da validação na juntas ou separadas, obrigando fazer uma novas chamadas a api?! ou seja, para cada request eu mando apenas 1 unica mensagem de erro no response ?! cada mensagem de validacao eu retorno e para a execucao do script?! Obrigado!
  12. ppanetony

    Api - Retorno de Erros/Validações

    Olá. Vou criar uma API pública e tenho uma dúvida quanto a retorno de erros/validações... Digamos um classe Alunos com os atributos: Nome, Idade, Telefone; Nome e Telefone são atributos de preenchimento obrigatórios; Caso esses campos cheguem na API sem preenchimento, como fazer o retorno ao cliente (consumidor da API), informando que esses campos dever ser preenchidos?! Retorno na mesma requisição os dois erros ou um erro em cada requisição?! Estou considerando que na API chegou valores sem preenchimento...
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.