S — Single Responsibility

  1. SSingle Responsibility
  2. OOpen/Closed
  3. LLiskov Substitution
  4. IInterface Segregation
  5. DDependency Inversion

OrderService

Before

class RegisterCustomer
{
    public function handle(array $data): void
    {
        $customer = Customer::create($data);

        Http::post('https://loyalty.example.com/sync', [
            'email' => $customer->email,
        ]);

        Mail::to($customer->email)->send(new WelcomeEmail($customer));
    }
}

After

class RegisterCustomer
{
    public function handle(array $data): Customer
    {
        $customer = Customer::create($data);

        event(new CustomerRegistered($customer));

        return $customer;
    }
}

// Listeners: SyncCustomerToLoyaltyApi, SendWelcomeEmail
// each queued, owning exactly one job
{CC}