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