Skip to content

Instantly share code, notes, and snippets.

@alanwillms
alanwillms / ISP-2.php
Last active November 1, 2016 12:07
Exemplo 2 de ISP em PHP
<?php
class EstoqueProduto
{
...
public function retirar($quantidade) { ... }
public function depositar($quantidade) { ... }
public function getValor() { ... }
...
}
@alanwillms
alanwillms / ISP-1.php
Last active November 1, 2016 12:06
Exemplo 1 de ISP em PHP
<?php
class EstoqueProduto
{
...
public function retirar($quantidade) { ... }
public function depositar($quantidade) { ... }
public function getValor() { ... }
...
}
@alanwillms
alanwillms / null-implementations.php
Created October 2, 2015 20:25
null-implementations.php
<?php
// Usando uma interface:
interface AssinaturaInterface
{
public function isPremium();
public function getValor();
public function cobrar(CartaoCredito $cartao);
}
class Assinatura implements AssinaturaInterface { ... }
@alanwillms
alanwillms / metodos-null-object.php
Created October 2, 2015 20:20
Null objects methods
<?php
// Endereço
class Endereco
{
public function getDescricao()
{
return implode(', ', [
$this->logradouro,
$this->numero,
$this->bairro,
@alanwillms
alanwillms / nomenclatura-null-object.php
Last active October 2, 2015 20:14
Null objects naming
<?php
class Endereco { ... }
class Autor { ... }
class Permissao { ... }
// se o endereço é null, o endereço é desconhecido:
class EnderecoDesconhecido { ... }
// se o autor é null, o autor é anônimo:
class AutorAnonimo { ... }
@alanwillms
alanwillms / maybe.php
Last active October 2, 2015 19:26
Usando a biblioteca pirminis/maybe-monad
<?php
$loginUsuario = Maybe($usuario)->getLogin()->val('anônimo');
// se $usuario é um objeto, $loginUsuario recebe o valor de getLogin()
// se $usuario é null, $loginUsuario recebe "anônimo"
// O código acima é equivalente a:
$loginUsuario = $usuario ? $usuario->getLogin() : 'anônimo';
@alanwillms
alanwillms / usuario-after-null-object.php
Created October 2, 2015 19:03
User class after null object (based on an Upcase example)
<?php
class Usuario
{
public function cobrar()
{
$this->assinatura->cobrar($this->getCartaoCredito()); // sem testar por null!
}
public function isPremium()
{
@alanwillms
alanwillms / null-object.php
Last active October 2, 2015 19:03
Null Object (based on an Upcase example)
<?php
class AssinaturaGratuita extends Assinatura
{
public function isPremium()
{
return false;
}
public function getValor()
@alanwillms
alanwillms / before-null-object.php
Created October 2, 2015 18:37
Before Null Object (based on an Upcase example)
<?php
class Usuario
{
public function cobrar()
{
// aqui
if (!empty($this->assinatura)) {
$this->assinatura->cobrar($this->getCartaoCredito());
}
}
@alanwillms
alanwillms / fail-fast.php
Created October 2, 2015 17:59
Fail fast to avoid dealing with null
<?php
declare(strict_types=1);
class UserException extends Exception { }
class Application
{
...
public function getUser() : User