二、 文獻探討與應用工具
2.1 文獻探討
2.1.4 設計模式
Gamma 等四人收集二十三個在物件導向程式設計 (Object Oriented Programming) 中常見的問題與解法,名之為設計模式 (Design Patterns),並記錄描述後集結成書[24]。
書中對設計模式的說明為:
值得一提的是,設計模式並不是一種發明。在設計模式一詞未被用於軟體設計領域 時,程式設計師使用物件導向程式設計的方法,仍然能設計出功能良好且穩定運行的程 式。但是設計模式被提出後,其優點不斷被證實,Lange 研究認為設計模式可以幫助應 用程式框架 (Framework)16 的使用者,更容易使用框架設計出更好的系統[25]。Broecke 運用 Observer 模式建立了多媒體網路系統框架[26],Schmidt 敘述設計模式如何被運用 於大型的商業系統與其帶來的優點[27]。
基於上述研究提出的優點,本研究參考 Head First Design Patterns[28]與 C# 3.0 design patterns[29]兩本書籍中的講解與示例,發現其中三種模式可適用於本系統。
16一組精心設計的函式庫集合,幫助程式設計者更容易設計程式。例如:Java Development Kit(JDK) , .Net Framework。
19
1. 適配器模式 (Adapter):Gamma 將其定義為「將某個類 (Class) 的介面轉換成另一 個介面。適配器模式可以消除由於介面不匹配所造成的兼容性問題。」
2. 抽象工廠模式 (Abstract Factory):Gamma 將其定義為「為一系列類提供統一的創建 介面。當需要這個系列類的某一個對象 (Entity)時,可以從抽象工廠中選出相應的 類創建一個對象。」
3. 代理模式 (Proxy):Gamma 將其定義為「替其他對象提供一個代理以控制對這個對 象的訪問。」
三種模式於如何與為何應用於 DOD 系統,說明於下:
1. Adapter
Adapter 其實大量存在現實世界中,圖 2-7 代表將 USB 介面轉成 PS2,Print Port 與 mini-USB 介面的三種產品。Adapter 的用途是將各種不同的介面,轉成另一種共同的介 面以利後續使用。通常使用 Adapter 是對現況的一種妥協,以 USB-PS2 Adapter 為例,
電腦只有 USB 且電腦運作良好;PS2 鍵盤也已存在且未損壞。此時使用 Adapter 將兩者 串接,就可以達到繼續使用兩者的目的。
圖 2-7 現實世界中的 Adapter
本研究在連結圖書館自動化系統的時候也遭遇相同的問題,如圖 2-8,整個 DOD 系統能正常運作,需使用者介面、DOD API 與圖書館自動化系統緊密配合。但現況是圖
20
書館的自動化系統已經存在並運作良好,不可能特別為本系統修改。所以在 DOD API 與圖書館自動化系統溝通的部分,本研究使用 Adapter 模式將圖書館自動化系統的功能 轉換成 DOD API 需要的功能。
以更宏觀的觀點來看 DOD 系統,整個 DOD API 部分都是 Adapter, DOD API 提供了一種 Adapter 讓讀者能由 DOD API 查詢自動化系統中自己的借閱紀錄,並隱藏了 圖書館自動化系統大部分不該由讀者取得的資訊。
圖 2-8 使用者介面-DOD API-圖書館自動化系統連接示意圖
2. Abstract Factory
Adapter 模式用於連結 DOD API 與圖書館自動化系統,而如何讓系統如圖 2-9,轉 換到不同圖書館或是圖書館更換自動化系統時不需要修改程式碼。就是利用 Abstract Factory 模式達成。DOD API 並不將所有不同圖書館的 Adapter 全部都寫在程式碼裡面(事 實上也不可能)而是針對不同圖書館提供不同的動態連結函式庫 (Dynamic Link Library),
並在執行時動態載入。
圖 2-9 使用者介面-DOD API-多個圖書館自動化系統連接示意圖
21
本系統若要應用於連結不同的自動化系統,只需將新的動態連結函式庫複製到系統 中,並修改 ASP.NET 設定檔 web.config 中的 <appSetting> 區段即可。
3. Proxy
圖 2-10 為網路上的 Proxy 機制,第一位使用者要求資料後,Proxy 伺服器會將資料 緩存 (Cache),之後第二、第三位使用者要求相同資料時,則不需再到原網頁伺服器要 求資料,而是由 Proxy 伺服器將緩存中的資料傳回給第二、第三位使用者。
圖 2-10 網際網路上 Proxy
DOD 系統的 Proxy 機制稍有不同,如圖 2-11。考慮到讀者可能會向書後附件檔案 伺服器要求多次相同的當檔案,所以 DOD 系統設計一個執行在讀者電腦上的 Proxy,
<configSections>
<appSettings>
<add key="Factory" value="XXX"/> //(XXX 為圖書館 Adapter 的名稱) </appSettings>
</configSections>
22
當讀者第一次向書後附件檔案伺服器要求資料後,Proxy 會將檔案儲存於使用者硬碟,
並於第二,第三次要求相同檔案時,Proxy 將直接從硬碟取出檔案並提供給使用者。
圖 2-11 DOD 系統的 Proxy