Share via


中介層

本節將提供有關在 WCF RIA Services 應用程式的中介層內使用網域服務、共用程式碼和資料實體的資訊與指引。在 3 層式架構應用程式中,中介層包含用來管理展示層與資料層之間互動的邏輯。您可以將商務規則和驗證檢查套用至中介層,以確定資料處於可接受的狀態。例如,您可以在人力資源應用程式中提供一個使用者介面,讓員工能夠遞交請假單,但是您必須確定員工的休假額度不得小於零。因此,在中介層要加入一個邏輯,檢查遞交請假單之前員工的休假額度。

為了建立最佳的 RIA Services 用戶端使用經驗,例如 Silverlight 應用程式,通常要在用戶端與伺服器上強制執行相同商務規則,但是中介層程式碼在用戶端和伺服器上必須同步。RIA Services 可讓您使用 .NET Framework 撰寫中介層的應用程式邏輯。RIA Services 會從中介層程式碼自動產生展示層程式碼,所以這三層總是同步的。本主題及其子主題將說明如何使用網域服務、共用程式碼和資料實體建置中介層。

資料存取層

當您使用 RIA Services 開發中介層時,可以處理任何類型的資料存取層。例如,您可以連接至下列資料存取層:

  • 實體資料模型。

  • LINQ to SQL 物件模型 (只有在已安裝 RIA Services 工具組,才有這個選項)。

  • Common Language Runtime (CLR) 物件。

  • 從來源公開資料的 Web 服務。

您可以將驗證檢查套用至資料模型,強制執行對從展示層送出的資料值所設的限制。

在某些情況下,您需要與多個資料表的資料進行互動。RIA Services 提供一種程式設計架構,可支援修改階層式資料模型 (例如 Order 與 OrderDetails 關聯性)、繼承資料模型 (例如父子關聯性) 和資料投射模型 (例如藉由將值從 Customer 和 Address 資料表提入單一資料模型,將資料反正規化)。如需詳細資訊,請參閱 資料

您可能需要在應用程式中顯示來自各種資料來源的資料,或向一個以上的網域服務公開單一實體。WCF RIA Services 因為支援不同 DomainContext 型別的實體之間的參考,因此可適用於這種情況。如需詳細資訊,請參閱逐步解說:在多個網域服務中共用實體

根據預設,RIA Services 不會將整個原始實體連同變更的值傳遞給資料存取層來檢查資料的並行。相反地,RIA Services 只會儲存並傳回那些標記著 RoundtripOriginalAttribute 屬性、ConcurrencyCheck 屬性或 TimeStamp 屬性的成員。如需詳細資訊,請參閱資料

網域服務

網域服務是網域商務邏輯的公用抽象概念,包含由網域商務邏輯組成的實體與作業。RIA Services 提供 DomainService 類別,這個類別是所有做為資料層商務邏輯介面的基底類別。在實作網域服務時指定想要公開從用戶端存取的實體類別,也指定允許通過網域服務的資料作業,這樣便能將應用程式邏輯加入網域服務中。針對每個可進行用戶端存取的網域服務,RIA Services 會為用戶端應用程式產生 DomainContext 類別。如需詳細資訊,請參閱網域服務

如需保護網域服務安全的詳細資訊,請參閱 WCF RIA Services 的安全性

共用程式碼

在某些情況下,您必須加入中介層專案與展示層專案之間共用的程式碼,但並不想將該程式碼放入網域服務或實體類別。例如,可能必須參考一個包含被許多其他專案使用之應用程式邏輯的程式庫。或者,可能必須建立從實體類別合併或變更值的自訂屬性,例如格式為「姓氏, 名字的第一個字母」的顯示名稱。RIA Services 可讓您在中介層包含類別或組件,這些類別或組件不需經過變更就能存取用戶端專案。如需詳細資訊,請參閱共用程式碼主題。

產生用戶端程式碼

使用 RIA Services 連結中介層專案與展示層專案時,RIA Services 架構會從中介層自動產生用戶端的程式碼。下列中介層程式碼產生用戶端程式碼:

  • 每個標註著 EnableClientAccessAttribute 屬性的網域服務。

  • 每個由網域服務參考的實體類別。

  • 根據共用命名慣例 (*.shared.cs*.shared.vb) 命名的程式碼檔不需經過修改便會複製至用戶端專案。

此中介層程式碼可透過用戶端 Proxy 類別來供用戶端使用。當中介層的程式碼變更時,系統會自動重新產生用戶端 Proxy 類別,因此展示層永遠與中介層同步。

如需詳細資訊,請參閱產生用戶端程式碼