Guilherme Guitte (Guitte)
O que é SOLID?
O que cada letra significa + exemplos
Best Practices
Progressive enhancement
Conclusão
<?php
class Product extends Eloquent
{
static public function last() {...}
public function getPrice() {...}
public function getImageUrl() {...}
public function processImage() {...}
static public function exportAll() {...}
public function hasValidName() {...}
public function isValid() {...}
}
<?php
class Product extends Eloquent
{
public function __construct(ProductValidator $validator) {...}
public function getPrice() {...}
public function getImageUrl() {...}
public function isValid() {...} // Uses $this->validator
/** static public function last() {...} **/
/** public function processImage() {...} **/
/** static public function exportAll() {...} **/
/** public function hasValidName() {...} **/
}
class ImageProcessor
{
public function processImage(Product $product) {...}
}
<?php
class Product extends Eloquent
{
public function getPrice() {
switch ($this->type) {
case 'kit':
// ...
break;
default:
// ...
break;
}
}
}
class Report
{
public function Report(Product $product) {
...
$product->getPrice();
...
}
}
<?php
class Product extends Eloquent
{
public function getPrice() {...}
}
class ProductKit extends Product
{
public function getPrice() {...}
}
class Report
{
public function Report(Product $product) {
...
$product->getPrice();
...
}
}
<?php
Cache::put('foo', 'bar', 5);
Cache::get('foo', null);
Mail::send('emails.hiho', $data, function($message) {
$message->to('zizaco@gmail.com', 'Zizaco')
->subject('Hiho!');
});
<?php
// NO CARGO CULT!!!!
interface ProductInterface
{
static public function last();
public function getPrice();
public function getImageUrl();
public function processImage();
static public function exportAll();
public function hasValidName();
public function isValid();
}
<?php
interface ProductInterface
{
public function getPrice();
public function isValid();
}
interface HasImageInterface
{
public function getImageUrl();
}
<?php
class Product extends Eloquent
{
public function isValid()
{
$validator = new ProductValidator;
return $validator->validate($product);
}
}
class ProductValidator
{
public function validate(Product $product) {...}
}
<?php
class Product implements ProductInterface
{
protected $validator;
public function __construct(ValidatorInterface $validator)
{
$this->validator = $validator;
}
public function isValid()
{
return $this->validator->validate($product);
}
}
class ProductValidator implements ValidatorInterface
{
public function validate(ProductInterface $product)
}
https://github.com/Zizaco/pulse