Borland 自 從 推 出 了Delphi 之 後, 深 受 程 序 設 計 人 員 的 青 睐。Delphi 的 每 一 個 新 版 本 都 給 用 戶 提 供 了 更 新、 更 好 的 功 能。 例 如,Delphi 1.0 版 本 給 用 戶 提 供 了 一 種 全 新 的 可 視 化 編 程 環 境, 使 用 戶 能 快 速 開 發Windows3.1 的 應 用 程 序。Delphi 2.0 中 增 加 了 數 據 模 塊 (Data Module) 等 多 種 高 效 的 數 據 重 用 功 能。 現 在 第 三 代 版 本Delphi 3 ― ― 多 層 結 構 的32 位 快 速 開 發 工 具 又 給 開 發 人 員 帶 來 了 全 新 的 多 層 結 構 概 念。
---- 早 在1980 年 第 一 個 數 據 庫 管 理 系 統 出 現 時, 數 據 庫 的 世 紀 就 已 悄 然 開 始。 那 時 的 觀 念 是 由 應 用 程 序 控 制 關 系 型 數 據 庫, 這 種 數 據 處 理 的 模 式 一 般 稱 為 單 層 結 構(1 -Tier)。 由 於 這 種 結 構 的 數 據 庫 程 序 占 用 計 算 機 資 源 較 多, 於 是 在80 年 代 中 期, 數 據 庫 應 用 開 始 轉 向 C/S 結 構, 也 就 是 所 謂 的 兩 層 結 構(2 -TIEr)。 這 種 結 構 在 近 十 年 內 不 但 得 到 了 廣 泛 的 運 用, 而 且 相 當 成 功。 然 而, 在 兩 層C/S 結 構 成 功 的 背 後 卻 逐 漸 暴 露 出 其 構 架 上 的 缺 陷。 其 中 最 明 顯 的 問 題 表 現 在 應 用 程 序 的 伸 縮 性 和 維 護 方 面。 例 如, 一 個 跨 國 企 業 如 何 把 數 據 庫 管 理 系 統 及 其 應 用 程 序 分 散 到 十 分 緩 慢 的 網 絡 上, 如 何 控 制 數 據 的 統 一 性 和 完 整 性; 一 旦 應 用 程 序 有 任 何 改 動, 維 護 人 員 就 必 須 修 改 每 一 個 客 戶 端 上 的 應 用。
---- 新 一 代 數 據 庫 管 理 系 統 在 傳 統 的 C/S 結 構 中, 增 加 了 應 用 程 序 服 務 器 ― ― 這 種 新 的 結 構 就 是 所 謂 的n -Tier 或Multi -TIEr。 應 用 程 序 服 務 器 包 括 了 統 一 的 界 面、 業 務 規 則 的 制 定 和 數 據 處 理 邏 輯 的 規 定 等 等。 多 層 應 用 服 務 技 術 允 許 分 割 應 用 程 序, 本 地 計 算 機 上 無 須 安 裝 一 整 套 數 據 庫 工 具, 就 可 以 在 另 一 台 機 器 上 存 取 數 據。 同 時 它 允 許 對 業 務 規 則 和 進 程 進 行 集 中 管 理, 並 在 整 個 網 絡 上 分 發、 實 現 進 程 負 載 的 動 態 調 節。
---- 眾 所 周 知, 開 發 服 務 器 級 的 應 用 程 序 要 比 開 發 單 純 應 用 級 的 程 序 困 難 得 多, 有 很 多 系 統 服 務 需 要 考 慮。 如 果 沒 有 一 種 好 的 工 具, 對 於 大 多 數 程 序 員 來 說, 開 發 一 個 復 雜 的 多 層 結 構 應 用 只 能 是 一 種 理 想。 為 了 使 這 種 理 想 方 便 地 實 現,Borland 公 司 推 出 了 開 發 多 層 結 構 所 需 的 技 術 和 工 具 集 ― ―MIDAS。
MIDAS ― ― 多 層 分 布 式 應 用 程 序 服 務 器---
- 對MIDAS 這 個 名 字 一 般 有 兩 種 理 解。MIDAS 是Multi -tier Distributed Application Services Suite( 多 層 分 布 式 應 用 程 序 服 務 包) 的 縮 寫, 這 也 诠 釋 了MIDAS 技 術 的 實 質。 也 許 因 為 這 個 本 義 太 長, 很 多 人 更 願 意 把 它 理 解 成Multi -tier Made Easy, 這 也 是MIDAS 的 作 用。 多 層 計 算(Multi -tiered computing) 是 業 界 對 此 類 技 術 通 用 的 術 語, 而Multi -tIEr 是Borland 公 司 采 用 的 技 術 術 語。Borland 典 型 的 三 層 結 構 如 下: 第 一 層 是 數 據 庫 服 務 器, 第 二 層 是 應 用 服 務 器, 第 三 層 是 瘦 客 戶 機。
---- 數 據 庫 服 務 器 是 諸 如InterBase、Oracle、Sybase、MS SQL Server 等 數 據 庫, 應 用 服 務 器 和 瘦 客 戶 機 由Delphi 建 立。 大 多 數 情 況 下, 數 據 庫 訪 問 軟 件( 例 如BDE, SQL *NET 等 等) 與 應 用 服 務 器 運 行 在 同 一 台 機 器 上。
---- 應 用 服 務 器 主 要 基 於Borland 的 分 布 式 數 據 技 術, 至 少 包 括 兩 方 面 的 內 容:
---- 1. 內 置 在Delphi 組 件 中;
---- 2. OLEnterprise 產 品 對 分 布 式 計 算 和 負 載 平 衡 提 供 超 強 的 支 持。
---- 內 置 在Delphi 組 件 中 使 你 能 很 容 易 地 使 用DCOM、Socket 或 OLEnterprise 連 接 兩 台 機 器, 並 在 兩 者 之 間 來 回 傳 輸 數 據 集。OLEnterprise 工 具 提 供DCOM 的 選 擇 方 法 簡 化 了 連 接 兩 台 機 器 的 任 務, 尤 其 是 對 兩 台 運 行Windows 95 的 機 器 更 是 如 此。OLEnterprise 使 用 戶 能 訪 問Object Broker, 它 允 許 在 幾 個 服 務 器 中 隨 機 分 配 任 務 負 載。 此 外, 還 可 以 在 幾 台 機 器 上 裝 載 服 務 器 工 具, 每 次 實 行 連 接 時,Broker 會 選 擇 其 中 一 台 機 器。 例 如, 如 果 你 有100 個 客 戶 端 和3 台 服 務 器,Object Broker 會 隨 機 分 配 負 載 給3 台 服 務 器, 每 台 服 務 器 大 約 有33 個 客 戶 端。Broker 會 在 服 務 器 異 常 關 閉 時 提 供 支 持。 編 寫 幾 行 代 碼 可 以 提 供 服 務 器 錯 誤 處 理, 把 客 戶 端 從 出 現 問 題 的 服 務 器 切 換 到 另 一 台 正 常 運 行 的 服 務 器。 另 外Broker 不 會 試 圖 把 一 個 新 的 客 戶 端 連 接 到 已 經 關 閉 的 服 務 器 上, 相 反 它 會 自 動 連 接 到 其 中 一 台 正 在 運 行 的 服 務 器 上。
---- 分 布 式 數 據 集 可 以 基 於DCOM, 在 客 戶 端 沒 有 任 何 數 據 庫 工 具 的 情 況 下 讀 取 遠 程 數 據。 有 些 用 戶 可 能 會 有 這 樣 的 疑 問: 通 過 浏 覽 器 和Web 服 務 器 也 能 在 客 戶 端 沒 有 任 何 數 據 庫 工 具 的 情 況 下 觀 察 遠 程 機 器 上 的 數 據 集, 為 什 麼 還 要 采 用 分 布 式 數 據 集 呢 ? 這 是 因 為 浏 覽 器 的 功 能 遠 不 如Borland 分 布 式 數 據 集 的 功 能。 如 果 沒 有 一 種 強 大 的 第 三 方 工 具( 如IntraBuilder), 要 增 強 浏 覽 器 的 約 束 條 件, 或 者 在 浏 覽 器 中 加 入 或 建 立 一 個 一 到 多 的 關 系 表 是 非 常 困 難 的。 但 這 些 功 能 都 可 以 在Delphi 的 多 層 應 用 程 序 中 簡 單 地 實 現,Delphi 的 編 譯 應 用 程 序 比 基 於Html 的 應 用 更 快 速、 更 易 於 應 答。
---- 分 布 式 數 據 集 允 許 在 客 戶 端 的 應 用 中 使 用 所 有 標 准 的Delphi 組 件, 包 括 數 據 庫 工 具, 但 是 客 戶 端 無 須 裝 載BDE、ODBC 或 者 任 何 數 據 庫 類 庫 ( 例 如Oracle SQL *NET、 Sybase CT -Lib 等 等) 。 當 然 網 絡 上 的 某 些 地 方 需 要BDE 或 類 似 的 引 擎, 但 是 客 戶 端 無 須 裝 載。 簡 言 之, 現 在 只 需 要 一 套 服 務 器 端 的 數 據 庫 工 具, 每 一 個 客 戶 端 就 可 以 使 用 它。
---- 分 布 式 數 據 集 是 縮 減 網 絡 通 信 量 的 一 種 方 法。 從 服 務 器 端 下 載 數 據 後, 在 客 戶 端 操 作 數 據 而 無 須 初 始 化 任 何 網 絡 交 易, 除 非 需 要 更 改 服 務 器 端。 這 意 味 著 在 不 啟 動 網 絡 交 易 的 情 況 下, 可 以 編 輯、 插 入、 刪 除 多 個 記 錄。 更 改 服 務 器 數 據 時, 可 以 在 預 先 選 定 的 時 間 段 內 把 多 個 數 據 包 送 到 網 絡 上。
---- 另 外, 當 客 戶 端 從 網 絡 上 斷 開 時, 仍 然 可 以 利 用“brIEfcase model" 訪 問 數 據。 其 操 作 步 驟 如 下: 先 把 一 個 遠 程 數 據 庫 復 制 到 磁 盤 上, 然 後 關 閉 計 算 機, 再 重 新 引 導 它、 斷 開 網 絡 連 接、 編 輯 數 據, 接 著 重 新 聯 網 並 修 改 數 據 庫。 所 有 這 些 都 可 以 在 沒 有 大 型 數 據 庫 工 具 的 客 戶 端 完 成。 這 說 明 為 了 操 作 數 據, 客 戶 端 不 必 每 時 每 刻 都 與 服 務 器 連 接。 這 對 於 膝 上 型 計 算 機 用 戶 和 想 要 保 持 數 據 庫 通 信 量 最 小 的 站 點 是 非 常 理 想 的。
---- MIDAS 技 術 的 另 一 方 面 是 提 供 訪 問 數 據 庫 約 束 條 件。 當 從 服 務 器 上 卸 載 數 據 時, 可 以 同 時 卸 載 一 套 自 動 執 行 的 約 束 條 件。 約 束 條 件 可 以 幫 助 程 序 員 確 保 用 戶 輸 入 合 法 的 數 據。 當 重 新 連 到 網 絡 上 時, 數 據 可 以 被 正 確 地 修 改。 如 果 你 在 更 改 數 據 庫 時 偶 然 發 生 了 一 個 錯 誤, 那 麼 內 建 的 機 制 會 幫 助 程 序 員 報 告 和 處 理 錯 誤。 例 如, 如 果 另 一 個 用 戶 已 經 更 改 了 你 正 試 圖 更 改 的 那 條 記 錄, 那 麼 你 將 看 到 一 個 提 示 你 如 何 處 理 的 選 項 表。 在Delphi Object Repository 中 的 一 個 預 建 表 單 可 以 使 你 的 應 用 程 序 簡 單 地 實 現 錯 誤 處 理。
---- Borland 多 層 計 算 的 另 一 個 重 要 功 能 是 將 數 據 庫 的 負 載 分 散 到 多 個 服 務 器 上。 這 樣, 一 旦 發 生 錯 誤 也 能 恢 復。 概 括 起 來 講, 這 些 技 術 存 在 於 三 種Broker 中:
---- 第 一 種 叫 做Remote Data Broker,Remote Data Broker 結 構 的 精 髓 是 讓 每 一 個 客 戶 端 不 再 需 要BDE, 取 而 代 之 的 是 一 個 中 央 化 的BDE, 以 集 中 管 理 的 方 式 降 低 每 一 個 客 戶 在BDE 上 所 需 的 開 銷 和 復 雜 度。
---- 第 二 種 叫 做Constraint Broker, 它 所 扮 演 的 角 色 是 保 證 所 有 客 戶 數 據 的 一 致 性 及 數 據 的 完 整 性。
---- 第 三 種 是Business Object Broker, 它 的 目 的 是 給 一 些 關 鍵 性 的 商 業 應 用 程 序 提 供 一 個 快 速 且 可 信 賴 的 使 用 環 境。 為 了 滿 足 這 種 高 層 次 的 要 求,Business Object Broker 會 自 動 地 將 應 用 程 序 做 適 當 的 劃 分, 並 復 制 重 要 的 業 務 規 則 到 每 一 個 區 間, 以 達 到 速 度 的 要 求。
實 現 工 具----
Borland 提 供 了 四 種Delphi 工 具 幫 助 用 戶 實 現 分 布 式 數 據 集。 前 兩 個 在 服 務 器 端:
---- 1. 遠 程 數 據 模 塊 像 標 准 數 據 模 塊 一 樣, 它 不 但 可 以 將 數 據 傳 播 到 當 前 的 應 用 中, 而 且 會 傳 到 網 絡 上 的 特 定 區 域 中。 特 別 是 它 們 把 簡 單 的 數 據 模 塊 轉 化 成COM 對 象, 允 許 你 通 過DCOM 訪 問 遠 程 服 務 器 上 的 數 據 庫。
---- 2. TProvider 組 件 就 像 可 以 駐 留 在 標 准 數 據 模 塊 中 的TTable 組 件 一 樣, 駐 留 在 遠 程 數 據 模 塊 中, 不 同 的 是TProvider 在 網 絡 上 發 布 數 據 表。TTable 和TQuery 組 件 都 含 有Provider 屬 性。 但 是 如 果 把 它 作 為 一 個 獨 立 的 組 件 訪 問, 會 有 更 大 的 靈 活 性 和 力 量。 特 別 是 把TProvider 組 件 與TTable 或TQuery 組 件 建 立 連 接, 網 絡 上 的 其 它 程 序 就 可 通 過DCOM 從TTable 或TQuery 訪 問 數 據。 遠 程 數 據 模 塊 的 任 務 就 是 使 客 戶 端 訪 問 服 務 器 上 特 定 的Provider。
---- 在 客 戶 端 可 以 利 用 兩 個 組 件 訪 問 服 務 器 提 供 的 數 據:
---- 1. TRemoteServer 組 件 把 客 戶 端 連 到 服 務 器 上, 特 別 是 連 到 服 務 器 的 遠 程 數 據 模 塊 上。 更 明 確 地 說 是 連 到 遠 程 數 據 模 塊 支 持 的COM 接 口 上。TRemoteServer 能 浏 覽 可 用 的 服 務 器, 一 旦 找 到 服 務 器,TRemoteServer 就 可 與 之 連 接。
---- 2. TClientDataSet 與TRemoteServer 組 件 連 接 在 一 起, 在 服 務 器 上 就 得 到 一 個 特 定 的Provider 。 簡 言 之,TClIEntDataSet 組 件 扮 演 了 與TQuery 或 TTable 同 樣 的 角 色, 只 不 過 它 是 為 遠 程 站 點 提 供 數 據 服 務。 如 同 在 許 多 標 准 的Delphi 應 用 程 序 中 傳 統TDatabase、 TTable、 TDataSource、TDBGrid 組 件 的 配 置 結 構 一 樣, 在 遠 程 數 據 集 中 使 用TRemoteServer、TClientDataSet、TDataSource 和 TDBGrid 組 件, 它 們 的 配 置 只 是 稍 有 不 同。 在 這 個 新 的 方 案 中,TRemoteServer 的 作 用 類 似 於TDatabase 的 作 用, 而TClIEntDataSet 組 件 與TTable 或TQuery 組 件 所 起 的 作 用 又 極 其 相 似。
結 論----
MIDAS 為 多 層 結 構 的 應 用 開 發 提 供 了 強 大 的 功 能, 這 使 得 開 發 者 再 也 無 需 為 越 來 越 龐 大 的 數 據 及 應 用 發 愁 了。 在Delphi 3.0 ClIEnt/Server 版 中 打 包 了MIDAS 的 開 發 版, 它 可 以 用 於 多 層 結 構 應 用 的 開 發 及 調 試, 在 應 用 分 布 時, 還 需 要 另 外 購 買Borland MIDAS for Delphi。 MIDAS 是Borland 公 司 金 門 結 構 系 列 產 品 的 一 部 分。 在 不 久 的 將 來, 金 門 結 構 的 其 它 開 發 工 具 如:C + +Builder、JBuilder 中 也 將 打 包MIDAS, 以 幫 助 用 戶 用C + +、Java 語 言 進 行 多 層 結 構 應 用 程 序 的 開 發。