0
0
LLDsystem_design~12 mins

Applying SOLID to real code in LLD - Architecture Diagram

Choose your learning style9 modes available
System Overview - Applying SOLID to real code

This system demonstrates how the SOLID principles guide the design of a simple order processing system. It ensures the code is easy to maintain, extend, and test by separating responsibilities and using interfaces.

Architecture Diagram
User
  |
  v
OrderController
  |
  v
OrderService <--> PaymentService
  |
  v
OrderRepository
  |
  v
Database

Cache <--> OrderService
Components
User
actor
Initiates order requests
OrderController
service
Handles user requests and delegates to services
OrderService
service
Processes orders following business rules
PaymentService
service
Handles payment processing separately
OrderRepository
database_access
Manages data storage and retrieval for orders
Database
database
Stores order data persistently
Cache
cache
Stores frequently accessed order data for quick retrieval
Request Flow - 16 Hops
UserOrderController
OrderControllerOrderService
OrderServiceCache
CacheOrderService
OrderServiceOrderRepository
OrderRepositoryDatabase
DatabaseOrderRepository
OrderRepositoryOrderService
OrderServicePaymentService
PaymentServiceOrderService
OrderServiceOrderRepository
OrderRepositoryDatabase
OrderRepositoryOrderService
OrderServiceCache
OrderServiceOrderController
OrderControllerUser
Failure Scenario
Component Fails:Database
Impact:Order data cannot be saved or retrieved, causing order processing failures
Mitigation:Use cache for read requests to serve stale data; queue write requests for retry; alert system admins for database recovery
Architecture Quiz - 3 Questions
Test your understanding
Which component is responsible for separating payment processing from order logic?
APaymentService
BOrderController
COrderService
DOrderRepository
Design Principle
This architecture applies SOLID principles by separating concerns: single responsibility for each component, open for extension by isolating payment logic, and dependency inversion by using interfaces between services and repositories. This makes the system easier to maintain and extend.