Single Responsibility Principle
A class should have only one reason to change.
— Robert C. Martin (Uncle Bob)
Example 1: Authentication
Authentication
Before: One class handling multiple responsibilities
| <?php
final class Auth
{
public function login(string $username, string $password): bool
{
// Check credentials
return true;
}
public function logout(): void
{
// Destroy session
}
public function hashPassword(string $password): string
{
// Hash password
return '';
}
public function generateToken(): string
{
// Generate auth token
return '';
}
}
|
After: Applying the Single Responsibility Principle
| <?php
final class AuthService
{
public function login(string $username, string $password): bool
{
// Check credentials
return true;
}
public function logout(): void
{
// Destroy session
}
}
final class PasswordHasher
{
public function hash(string $password): string
{
// Hash password
return '';
}
}
final class TokenGenerator
{
public function generate(): string
{
// Generate auth token
return '';
}
}
|
Example 2: Payment Processing
Payment Processing
Before: One class handling multiple responsibilities
| <?php
class Payment
{
public function process(float $amount): void
{
// Process payment
}
public function validateCard(string $cardNumber): bool
{
// Validate card
return true;
}
public function generateReceipt(): void
{
// Generate receipt
}
public function sendReceiptEmail(): void
{
// Send receipt via email
}
}
|
After: Applying the Single Responsibility Principle
| <?php
final class PaymentProcessor
{
public function process(float $amount): void
{
// Process payment
}
}
final class CardValidator
{
public function validate(string $cardNumber): bool
{
// Validate card
return true;
}
}
final class ReceiptGenerator
{
public function generate(): void
{
// Generate receipt
}
}
final class ReceiptMailer
{
public function send(): void
{
// Send receipt email
}
}
|
Example 3: User Registration
Registration Flow
Before: One class handling multiple responsibilities
| <?php
class User
{
public function __construct(
public string $name,
public string $email
) {}
public function save(): void
{
// Save user to database
}
public function update(): void
{
// Update user in database
}
public function delete(): void
{
// Delete user from database
}
public function sendWelcomeEmail(): void
{
// Send email to user
}
}
|
After: Applying the Single Responsibility Principle
| <?php
final class User
{
public function __construct(
public readonly string $name,
public readonly string $email
) {}
}
final class UserRepository
{
public function save(User $user): void
{
// Persist user
}
public function update(User $user): void
{
// Update user
}
public function delete(User $user): void
{
// Remove user
}
}
final class UserMailer
{
public function sendWelcomeEmail(User $user): void
{
// Send welcome email
}
}
|