首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

智慧型用戶端開發:以 NHibernate 與 Rhino Service Bus 建構分散式應用 (上)

     編輯:關於.NET

從 Web 應用轉向智慧型用戶端 (Smart Client) 開發時,常面臨資料存取、前後端通訊、離線同步等挑戰。本文系列將以線上借閱圖書館系統「Alexandria」為例,示範如何結合 NHibernate (O/RM) 與 Rhino Service Bus (訊息總線) 建構健壯的分散式智慧型用戶端應用。完整程式碼託管於 GitHub。

職責分配:介於兩極之間

智慧型用戶端架構介於「胖用戶端/薄伺服器」與「薄用戶端/胖伺服器」之間:

  • 後端:執行核心業務邏輯、資料持久化、協調外部服務 (如抵押供應商)。
  • 前端:提供豐富互動體驗、本地快取與離線操作能力、透過訊息總線與後端非同步協作。

若後端僅作資料存儲,建議改用 WCF RIA Services 或 WCF Data Services;若前端僅作顯示,則失去智慧型用戶端優勢 (離線、回應性、負載分擔)。

分散式運算八大謬誤與對策

建構分散式系統必須正視 Peter Deutsch 的八大謬誤:網路可靠、零延遲、無限頻寬、網路安全、拓撲不變、單一管理員、零傳輸成本、同質網路。智慧型用戶端透過 本地快取 與 非同步訊息傳遞 緩解這些問題:快取提升回應性並支援離線;訊息佇列解耦發送與接收,容忍網路中斷與延遲。

後端基礎建設:訊息批次與單向通訊

拒絕 RPC 風格的細粒度遠端呼叫。前端啟動時發送 訊息批次 (如 MyBooksQuery, MyQueueQuery, MyRecommendationsQuery) 至後端,單次網路往返換取多組資料。Rhino Service Bus 基於單向佇列訊息交換,支援 Send (發送並忘記) 與 Reply (回覆發送者) 模式。

Rhino Service Bus 核心概念

  • 訊息消費者:實作 ConsumerOf<TMsg>,透過 IoC 容器 (Castle Windsor) 注入相依性 (如 ISession, IServiceBus)。
  • 啟動引導程式:繼承 AbstractBootStrapper,設定 NHibernate SessionFactory、訊息模組、相依性註冊。
  • 訊息模組:類比 HTTP Module,攔截訊息到達/完成事件,管理 NHibernate Session 生命週期 (每批次一 Session)。

Session 與交易管理:基礎設施自動化

Session 管理:NHibernateMessageModule 在訊息到達時開啟 Session,處理完成時釋放。同一批次訊息共享 Session,自受惠於 NHibernate 一級快取 (避免重複查詢用戶實體)。

交易管理:由 Rhino Service Bus 使用 TransactionScope 包裹整個訊息批次,所有消費者操作隸屬同一交易。NHibernate 自動登記環境交易,開發者無需手寫交易代碼。

支援間歇性連線:基礎設施層級快取

引入 持久化快取 (二進位序列化至磁碟) 作為訊息基礎設施一環:

  1. 發送查詢訊息 (ICacheableQuery) 時,攔截器先檢查快取,若命中即以快取資料觸發消費者邏輯,UI 立即顯示。
  2. 同時仍發送真實訊息至後端。
  3. 後端回應 (ICacheableResponse) 到達時,正常處理並更新快取 (時間戳機制解決亂序)。

此設計讓應用程式碼完全感知不到快取存在,重啟應用亦可離線運作,真正實現「間歇性連線」能力。

下一步預告

下篇將深入探討:資料傳輸最佳實踐 (DTO vs 領域模型)、分散式變更管理 (命令 vs CRUD)、離線狀態衝突解決、複雜操作確認模式。

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