The before code shows a single class handling all order steps, causing tight coupling and limited scalability. The after code splits responsibilities into services communicating via events, enabling independent scaling, fault isolation, and better handling of real-world complexity.
### Before: Monolithic order processing
class ECommerceApp:
def process_order(self, order):
self.check_inventory(order)
self.process_payment(order)
self.update_order_status(order)
def check_inventory(self, order):
# Inventory check logic
pass
def process_payment(self, order):
# Payment processing logic
pass
def update_order_status(self, order):
# Update order status
pass
### After: Microservices with event-driven communication
class OrderService:
def create_order(self, order):
# Validate and save order
self.publish_event('order_created', order)
def publish_event(self, event_type, data):
# Send event to message broker
pass
class InventoryService:
def on_order_created(self, order):
# Check and reserve inventory
self.publish_event('inventory_reserved', order)
def publish_event(self, event_type, data):
# Send event to message broker
pass
class PaymentService:
def on_inventory_reserved(self, order):
# Process payment
self.publish_event('payment_processed', order)
def publish_event(self, event_type, data):
# Send event to message broker
pass
class NotificationService:
def on_payment_processed(self, order):
# Notify user
pass