• 沒有找到結果。

第二章 相關研究與技術背景

2.1 Aspect-Oriented Programming

語言(Aspect-Oriented Programming, AOP)可以快速的達到此目的。本章節一開始 將會介紹剖面導向語言的概念;接著會介紹我們在設計、開發工具時用到的相關 技術,內容包含 2.2 節介紹 AspectJ、2.3 節介紹 Jsqlparser、2.4 節介紹 SaaS Multi-tenant System、2.5 節則介紹 SaaS 多租戶系統的資料綱要。

2.1 Aspect-Oriented Programming

為 了 滿 足 整 體 系 統 目 標 的 特 定 需 求 , 軟 體 系 統 的 設 計 會 包 含 許 多 的 考 量

(concern)。有人認為必頇將這些特定需求功能分離(separation of concerns, SOC),也就是所謂模組化。而設計一套軟體系統,最重要的就是它的主要功能,

不管是早期的程序性程式設計(Procedural programming)或物件導向程式設計

(object-oriented programming)都是為此目標而發展的。而横跨系統多個模組中 的共通功能(crosscutting concern)就是希望能交由剖面導向語言(Aspect-Oriented Programming, AOP)處理。

剖面導向語言的概念是於 1997 年所提出,一提出此概念立即引起程式語言 與軟體工程方面的學者專家重視及迴響,之後,便陸續發佈許多的相關研究。目

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

前有不少支援 AOP 的語言及工具,其中又以 Xerox Palo Alto 實驗室開發出以 Java 為基礎的 AOP 程式語言“AspectJ”最盛行。剖面導向語言是一種新的程式機 制。舉例來說,在一般應用程式當中除了業務面的功能性需求外,經常需要做許 多授權檢查與 Log 紀錄等等的非功能性需求,而這些需求在實作上往往都會分 散在應用程式的各個功能模組當中,造成不易集中維護等等的缺點。現有的程式 機制(programming mechanism) 在實作這方面需求時並無法提供有效的封裝與模 組化的支援,所以必頇將相同的程式碼重複於功能模組當中。雖然目前的程式機 制可以將程式碼集中開發及維運,但還是必頇在引用該段程式碼的地方加入引用 的程式碼。例如,下列程式碼(圖 2.1),每個功能皆需單獨加入 Log 紀錄的程式 碼。

圖 2.1 重覆出現的程式碼片段

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

剖面導向程式設計就因為此種需求而產生,此種設計方法可先將重覆的程式 碼移出,並且集中在另一個模式,之後再透過程式的整合機制去將兩個模組做結 合,並完成實作。即便將來需要變更 Log 紀錄模組部份,也只需要去修改 Log 紀錄模組本身程式碼,不需要變更所有與 Log 紀錄相關的所有程式碼。

圖 2.2 利用 AOP 織入重覆程式碼片段

想要了解 AOP 的精神,則必需要先了解三項議題:

一、考量的分離(separation of concerns):考量如果有做良好的模組化會使 程式開發的效率提升,並且可以更容易的去修改模組程式。

二、横跨(crosscutting):程式設計與撰寫時常常會造成系統中反覆出現類 似的程式碼及不同需求的程式碼夾雜不清,可將程式碼嵌入到應用系 統的各個模組中,具有橫跨的特性。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

三、相依性反向(dependencies inversion):要依賴於抽象,而不要依賴於具 體類別。當名稱愈抽象,則受到變動而影響的機會就會愈小。

進一步使用 AspectJ 來說明 AOP 的基本想法。AspectJ 程式分為 class 模組與 aspect 模組,Aspect 模組主要是定義 pointcuts 與 advice。而 Pointcuts 是規範 aspect 與應用系統介接的 join points,即 pointcut 是 join points 的集合;advice 則是定義 由 join points 定義的 point 所要執行的程式碼。每個 advice 都需要一個 pointcut,

二者共同界定應用程式在何時以及如何實現橫跨性的需求。AOP 最後會再透過 織入(weaving)的機制將 aspect 的程式碼整合到功能模組中,而不會更動到原有的 軟體架構。AOP 的架構如下:

圖 2.3 以 AOP 方式組合成應用系統的各類模組

而 AOP 在編譯時,利用 AOP 本身的編譯工具做為執行工具。且編譯時 並非一定需要原始程式碼檔案,編譯好的.class 一樣可以進行 weaving Rules 的動作。如圖 2.4 所示,將 AOP Complier 的流程皆表示出來。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

圖 2.4 AOP 編譯程式流程

AOP 的優點有下列幾項:

一、單一模組的責任更簡單 二、可以做更好的模組化 三、使系統更容易發展 四、使程式設計上更具彈性 五、使程式的重用率更高

六、加快開發速度並滅少實作成本