the "first five principles" named by Robert C. Martin in the early 2000s that stands for five basic principles of object-oriented programming and design. https://goo.gl/9EiCHX
App\Validators\UserValidator as Validator; use App\Mail\UserRegistration; class UserService { /** * @var IlluminateValidator */ protected $validator; public function __construct(Validator $validator) { $this->validator = $validator; } public function create($data) { $this->validator->validate($data); $user = new \App\Models\User(); $user->fill($data); $user->save(); Mail::to('[email protected]')->send(new UserRegistration($user)); } }
App\Validators\UserValidator as Validator; use App\Mail\UserRegistration; class UserService { /** * @var IlluminateValidator */ protected $validator; public function __construct(Validator $validator) { $this->validator = $validator; } public function create($data) { $this->validator->validate($data); $user = new \App\Models\User(); $user->fill($data); $user->save(); Mail::to('[email protected]')->send(new UserRegistration($user)); } }
App\Validators\UserValidator as Validator; use App\Mail\UserRegistration; class UserService { /** * @var IlluminateValidator */ protected $validator; public function __construct(Validator $validator) { $this->validator = $validator; } public function create($data) { $this->validator->validate($data); $user = new \App\Models\User(); $user->fill($data); $user->save(); Mail::to('[email protected]')->send(new UserRegistration($user)); } }
App\Validators\UserValidator as Validator; use App\Mail\UserRegistration; class UserService { /** * @var IlluminateValidator */ protected $validator; public function __construct(Validator $validator) { $this->validator = $validator; } public function create($data) { $this->validator->validate($data); $user = new \App\Models\User(); $user->fill($data); $user->save(); Mail::to('[email protected]')->send(new UserRegistration($user)); } }
*/ class CheckoutService { public function confirmation($data, $gateway) { if ($gateway == 'paypal') { // PayPal payment process } if ($gateway == 'pagseguro') { // PagSeguro payment process } } }
*/ class CheckoutService { public function confirmation($data, $gateway) { if ($gateway == 'paypal') { // PayPal payment process } if ($gateway == 'pagseguro') { // PagSeguro payment process } } } VIOLATION
*/ class CheckoutService { public function confirmation($data, $gateway) { if ($gateway == 'paypal') { // PayPal payment process } if ($gateway == 'pagseguro') { // PagSeguro payment process } } }
*/ class CheckoutService { public function confirmation($data, $gateway) { if ($gateway == 'paypal') { // PayPal payment process } if ($gateway == 'pagseguro') { // PagSeguro payment process } } }
*/ class CheckoutService { public function confirmation($data, $gateway) { if ($gateway == 'paypal') { // PayPal payment process } if ($gateway == 'pagseguro') { // PagSeguro payment process } if ($gateway == 'picpay') { // PicPay payment process } } }
UserService * @package App\Service */ class UserService implements RegistrationInterface { public function save() { ... } public function sendConfirmation($user) { ... Mail::to($user->email)->send(new AccountConfirmation($user)); } }
*/ class ProductService implements RegistrationInterface { public function save() { ... } public function sendConfirmation($user) { // ¯\_(ツ)_/¯ } } VIOLATION
UserService * @package App\Service */ class UserService implements UserRegistrationInterface { public function save() { ... } public function sendConfirmation($user) { ... } }
*/ class ProductService implements ProductRegistrationInterface { public function save() { ... } public function updateElasticSeach($product) { ... } }
App\Validators\UserValidator as Validator; use App\Mail\UserRegistration; class UserService { /** * @var IlluminateValidator */ protected $validator; public function __construct(Validator $validator) { $this->validator = $validator; } public function create($data) { $this->validator->validate($data); $user = new \App\Models\User(); $user->fill($data); $user->save(); Mail::to('[email protected]')->send(new UserRegistration($user)); } }
App\Validators\UserValidator as Validator; use App\Mail\UserRegistration; class UserService { /** * @var IlluminateValidator */ protected $validator; public function __construct(Validator $validator) { $this->validator = $validator; } public function create($data) { $this->validator->validate($data); $user = new \App\Models\User(); $user->fill($data); $user->save(); Mail::to('[email protected]')->send(new UserRegistration($user)); } }
... public function register() { $this->app->bind('App\Service\UserService', function ($app) { $validatorFactory = $app->make('validator'); return new \App\Service\UserService( new \App\Validators\UserValidator($validatorFactory) new \App\Model\User(), ); }); } }
... public function register() { $this->app->bind('App\Service\UserService', function ($app) { $validatorFactory = $app->make('validator'); return new \App\Service\UserService( new \App\Validators\UserValidator($validatorFactory) new \App\Model\User(), ); }); } }
AppServiceProvider extends ServiceProvider { public function boot() { StockEntry::observe(StockEntryObserver::class); } public function register() { ... } }