Problem Statement
When different parts of a program handle multiple responsibilities mixed together, it becomes hard to understand, maintain, and update. Changes in one part can unexpectedly break others, causing bugs and slowing development.
┌───────────────┐ ┌───────────────┐ ┌───────────────┐ │ User Interface│────▶│ Business Logic│────▶│ Data Access │ └───────────────┘ └───────────────┘ └───────────────┘
This diagram shows three separate layers: User Interface, Business Logic, and Data Access, each focusing on a specific concern.
### Before: No separation of concerns class OrderProcessor: def process_order(self, order): print(f"Validating order {order}") # validation logic print(f"Charging payment for {order}") # payment logic print(f"Saving order {order} to database") # database logic ### After: Separation of concerns class OrderValidator: def validate(self, order): print(f"Validating order {order}") # validation logic class PaymentProcessor: def charge(self, order): print(f"Charging payment for {order}") # payment logic class OrderRepository: def save(self, order): print(f"Saving order {order} to database") # database logic class OrderProcessor: def __init__(self): self.validator = OrderValidator() self.payment = PaymentProcessor() self.repository = OrderRepository() def process_order(self, order): self.validator.validate(order) self.payment.charge(order) self.repository.save(order)