本文展示一個典型 Java 圖書銷售系統的服務層架構,涵蓋圖書、庫存歷史、訂單、用戶四大核心業務域的接口定義與實現類結構,體現「面向接口編程、分層解耦、單一職責」的工程實踐。
| 業務域 | 接口 | 實現類 | 核心職責 |
|---|---|---|---|
| 圖書管理 | BookService | BookServiceImpl | 圖書 CRUD、分類、查詢、上下架 |
| 庫存歷史 | BookStockHistoryService | BookStockHistoryServiceImpl | 庫存變動記錄、歷史追溯、報表統計 |
| 訂單處理 | OrderService | OrderServiceImpl | 下單、支付、取消、退款、物流跟蹤 |
| 用戶中心 | UserService | UserServiceImpl | 註冊、登錄、權限、收貨地址、會員等級 |
XxxService,方法名動詞開頭(save、findById、listByCondition)PageResult<T>BizException,系統異常向上拋出@Transactional 標註在實現類方法上,接口不暴露事務細節
// BookService.java
public interface BookService {
BookDTO save(BookDTO book);
BookDTO findById(Long id);
PageResult<BookDTO> list(BookQueryDTO query);
void updateStock(Long bookId, int quantity);
void onShelf(Long id);
void offShelf(Long id);
}
// OrderService.java
public interface OrderService {
OrderDTO create(OrderCreateDTO dto);
OrderDTO pay(Long orderId, PayDTO payInfo);
void cancel(Long orderId, String reason);
OrderDTO findById(Long id);
PageResult<OrderDTO> list(OrderQueryDTO query);
}
@Service 標註為 Spring Bean,@Transactional 統一事務控制calculateDiscount、sendNotification)@Autowired AuditLogService)
Controller (REST API)
↓
Service (BookService, OrderService...) ← 本文核心
↓
Repository / Mapper (MyBatis/JPA)
↓
Database
OrderPaidEvent,庫存服務異步消費扣減庫存,解耦同步調用
com.bookstore
├── service
│ ├── BookService.java
│ ├── impl
│ │ └── BookServiceImpl.java
│ ├── OrderService.java
│ ├── impl
│ │ └── OrderServiceImpl.java
│ ├── UserService.java
│ └── ...
├── repository
├── controller
├── dto
└── exception
清晰的服務層接口與實現分離,配合 Spring 依賴注入與事務管理,構建了可測試、可維護、可擴展的業務中台基石。實際項目中可進一步引入 DDD 領域建模、CQRS 讀寫分離、響應式編程等進階模式應對高併發與複雜業務演進。