Como Usar Between Entre Duas Colunas de Data no Laravel
Trabalhar com intervalos de datas é uma necessidade comum em aplicações web, especialmente em sistemas que lidam com eventos, agendamentos... Leia mais
Desenvolvedor de Software
Quando desenvolvemos software, é comum encontrar situações onde diferentes comportamentos precisam ser aplicados a objetos semelhantes. A abordagem tradicional de implementar todos esses comportamentos diretamente na classe pode tornar o código confuso e difícil de manter. É aí que entra o Padrão Strategy.
O Padrão Strategy é um padrão de design comportamental que permite definir uma família de algoritmos ou comportamentos, encapsulá-los em classes separadas e torná-los intercambiáveis. Com o Strategy, movemos a responsabilidade de decidir qual comportamento aplicar para fora da classe principal. Dessa forma, podemos modificar ou estender o comportamento sem alterar o código original da classe.
Imagine que estamos desenvolvendo um sistema de pagamento para uma loja online. O cliente pode escolher diferentes métodos de pagamento, como cartão de crédito, PayPal ou boleto. Em vez de implementar cada método de pagamento diretamente na classe Pedido, podemos aplicar o Padrão Strategy para gerenciar esses comportamentos.
Primeiro, criamos uma interface que todas as estratégias de pagamento irão implementar:
<?php
interface MetodoPagamento
{
public function pagar(float $valor);
}
Agora, podemos criar diferentes estratégias para os métodos de pagamento:
<?php
class PagamentoCartaoCredito implements MetodoPagamento
{
public function pagar(float $valor)
{
echo "Pagamento de R$ {$valor} realizado com cartão de crédito.\n";
}
}
class PagamentoPayPal implements MetodoPagamento
{
public function pagar(float $valor)
{
echo "Pagamento de R$ {$valor} realizado via PayPal.\n";
}
}
class PagamentoBoleto implements MetodoPagamento
{
public function pagar(float $valor)
{
echo "Pagamento de R$ {$valor} realizado via boleto bancário.\n";
}
}
Cada uma dessas classes implementa a interface MetodoPagamento e possui sua própria lógica para processar o pagamento.
Agora, a classe Pedido pode aceitar qualquer estratégia de pagamento e delegar a responsabilidade de processar o pagamento para a estratégia escolhida:
<?php
class Pedido
{
private $metodoPagamento;
public function __construct(MetodoPagamento $metodoPagamento)
{
$this->metodoPagamento = $metodoPagamento;
}
public function processarPagamento(float $valor)
{
$this->metodoPagamento->pagar($valor);
}
}
A classe Pedido é simples, e seu único trabalho é delegar o processo de pagamento para o método escolhido, mantendo o código mais limpo e flexível.
Com as classes prontas, podemos criar um pedido e definir a estratégia de pagamento que desejamos usar:
<?php
// O cliente escolhe pagar com cartão de crédito
$pedido = new Pedido(new PagamentoCartaoCredito());
$pedido->processarPagamento(150.00);
// O cliente escolhe pagar via PayPal
$pedido = new Pedido(new PagamentoPayPal());
$pedido->processarPagamento(250.00);
// O cliente escolhe pagar com boleto
$pedido = new Pedido(new PagamentoBoleto());
$pedido->processarPagamento(300.00);
Cada vez que o cliente realiza uma compra, a classe Pedido delega o processo de pagamento para a estratégia correta, sem a necessidade de modificar o código da classe. Se um novo método de pagamento for adicionado, como Pix, basta criar uma nova estratégia sem alterar as classes existentes.
if/else ou switch, o Strategy permite selecionar o comportamento dinamicamente através de polimorfismo.O Padrão Strategy é útil quando:
O Padrão Strategy é uma ótima solução quando queremos flexibilidade no comportamento dos objetos, especialmente quando esse comportamento pode variar ou evoluir ao longo do tempo. Ao aplicar esse padrão, mantemos nosso código organizado e fácil de estender. No contexto de desenvolvimento PHP, o Strategy pode ser extremamente útil para lidar com diferentes cenários onde algoritmos ou comportamentos precisam ser dinâmicos e intercambiáveis.
Trabalhar com intervalos de datas é uma necessidade comum em aplicações web, especialmente em sistemas que lidam com eventos, agendamentos... Leia mais
Configurar e gerenciar bancos de dados pode ser uma tarefa desafiadora, especialmente quando você precisa garantir a portabilidade e a... Leia mais
Então problemas do dia-a-dia se por alguma motivo qualquer você prefere utilizar ambientes de desenvolvimento locais ao invés de containers... Leia mais
Sim, dá pra desenvolver Laravel no Windows sem sofrer. Mas você precisa fazer do jeito certo: usando WSL + Valet... Leia mais