首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 股票軟件斷網提示設計:業務邏輯層異常處理模式

     編輯:程式設計疑難解答

架構分層建議

+------------------+
|   表現層         |  Swing/JavaFX/UI:顯示「網絡異常,請稍後重試」彈窗/狀態欄
+------------------+
        ↓ 調用
+------------------+
|   業務邏輯層     |  數據獲取服務:捕獲 IOException,拋出自定義 BusinessException("NETWORK_ERROR")
+------------------+
        ↓ 調用
+------------------+
|   數據訪問層     |  HTTP Client:OkHttp/HttpClient 發起請求,超時/斷網拋 IOException
+------------------+

關鍵代碼模式

數據訪問層

public String fetchStockData(String code) throws IOException {
    Request request = new Request.Builder()
        .url("https://api.example.com/stock/" + code)
        .timeout(5, TimeUnit.SECONDS)
        .build();
    try (Response response = client.newCall(request).execute()) {
        if (!response.isSuccessful()) throw new IOException("HTTP " + response.code());
        return response.body().string();
    }
}

業務邏輯層

public StockQuote getQuote(String code) throws BusinessException {
    try {
        String json = dao.fetchStockData(code);
        return parseJson(json);
    } catch (IOException e) {
        log.warn("獲取股票數據失敗: {}", code, e);
        throw new BusinessException("NETWORK_ERROR", "網絡連接異常,請檢查網絡後重試", e);
    }
}

表現層

try {
    StockQuote quote = service.getQuote("000001");
    ui.updateQuote(quote);
} catch (BusinessException e) {
    if ("NETWORK_ERROR".equals(e.getCode())) {
        ui.showNetworkErrorDialog();  // 彈窗/Toast/狀態欄紅點
    } else {
        ui.showError(e.getMessage());
    }
}

進階優化

  • 重試機制:@Retryable 或手寫指數退避重試 3 次。
  • 熔斷器:Hystrix/Resilience4j 防止連續失敗拖垮系統。
  • 離線緩存:本地保存最近成功數據,斷網時展示舊數據並標註「數據可能過期」。
  • 網絡狀態監聽:Android ConnectivityManager、JavaFX NetworkDetector 主動感知斷網/恢復,自動重試。

核心原則

異常在發生層捕獲、轉換為業務異常、向上拋出,表現層統一根據異常碼決定用戶提示方式。業務邏輯層不直接操作 UI,保持純淨可測試。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved