📘 SAP Hybris 請求處理流程與擴充原則
🔄 請求處理流程圖(文字版)
┌────────────────────────────┐ │ 前端發出 API 請求 │ └────────────┬──────────────┘ │ ▼ ┌────────────────────────────┐ │ ✅ Controller (Impl 層) │ │ e.g. ExtendedUsersController│ │ @Controller / @RestController │ └────────────┬──────────────┘ │ 呼叫介面(Facade Interface) ▼ ┌────────────────────────────┐ │ Facade Interface │ │ e.g. ElabUserFacade │ │ ← Spring XML 指派實作 │ └────────────┬──────────────┘ │ ▼ ┌────────────────────────────┐ │ ✅ DefaultElabUserFacade │ │ ← Facade 的 Impl 類別 │ └────────────┬──────────────┘ │ 呼叫底層 service interface ▼ ┌────────────────────────────┐ │ Service Interface │ │ e.g. ElabUserService │ │ ← Spring XML 指派實作 │ └────────────┬──────────────┘ │ ▼ ┌────────────────────────────┐ │ ✅ DefaultElabUserService │ │ ← Service 的 Impl 類別 │ └────────────┬──────────────┘ │ ▼ ┌────────────────────────────┐ │ Populator / Converter │ │ 將 Model 映射成 DTO │ │ e.g. UserModel → UserDTO │ └────────────┬──────────────┘ │ ▼ ┌────────────────────────────┐ │ Model 層 (items.xml) │ │ e.g. UserModel, POSModel │ └────────────┬──────────────┘ │ ▼ ┌────────────────────────────┐ │ DB / FlexibleSearch 層 │ │ PK, type system, relation │ └────────────────────────────┘
✅ 擴充原則說明
1. 不要直接修改原生 interface
- Hybris 的 Service 與 Facade interface 是平台契約,應避免修改
- 建議:寫自己的 impl 類別,並透過 Spring XML override
2. 使用 Spring XML 指定實作類別
<bean id="elabUserFacade" class="com.yourcompany.facades.impl.CustomElabUserFacade"/>
- 寫在 *-spring.xml 檔案中即可
- Controller 中的 @Resource(name = "elabUserFacade") 會自動注入該實作
3. DTO 請用 Populator / Converter 處理
- Model 不直接傳給前端
- 建議將 Model → DTO 寫成 Populator、Converter,獨立維護轉換邏輯
4. items.xml 控制整個資料結構與 DB schema
- 所有 model 都來自 items.xml 編譯結果
- 不要手動改 DB 結構,一律透過 model 層調整
💡 小提醒
Hybris 架構設計是 interface + Spring Bean override。若需擴充邏輯,請改寫 impl 類別,不要修改 interface,並透過 Spring XML 綁定。我們的 controller、facade、service、model 應保持分層清楚,利於測試與升級。