• 沒有找到結果。

4.2 系統實作展示

4.2.2 二個 Facebook 案例套用

接下來再引入二個文獻探討 CatchAndRetry[3]中提到的案例,這個案例來自 Facebook 系統,雖也只能模擬業務流程上相同需求邏輯,不過也更接近真實的應用狀 況,也是希望能以更接近真實的狀況下採用 AspectW。這兩個應用是:

一、Facebook Status Updates:取得使用者他所有朋友們最新的狀態並更新到自 已臉書的首頁。

二、Organizing a Facebook Event:發出一個邀請函給他住的城市或地區的朋友 們來參加一場派對。

第一個 Facebook 案例情境如圖 4.7 所示。有位名為“Alen”的人士他有四位好友。

此例只以四位好友為例,不過真實世界數百位才是常有的情境。他打算取出他所有好友 新更新的訊息。在執行中當然也要留下紀錄,事後可用來分析使用者行為。同時取得眾 多朋友的訊息過程中,若有一、兩位朋友的訊息取得失敗就忽略不管吧。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

圖 4.7 Facebook Status Updates - scenario

圖 4.8 Case Study : Facebook Status Updates with AspectW

AspectW 可以很快看出有加入非主功能機制 Trace 做使用紀錄。主功能是呼叫

“GetStatusUpdate(“Alen”)”函式取得“Alen”好友們的新訊息然後輸出到畫面。在下半段 也有使用 AspectW。這一段碼先用“friends.Get(name)”把“Alen”所有好友找出來再用指 令“statusUpdates.Get(p)”一一取得每人更新的訊息後再回傳。若在取得個人訊息失敗

第二個案例情境是這樣的:“Alen” 打算明天舉辦一場派對邀請 Facebook 好友們來 同歡,但因地理限制不可能把全世界的好友都請來,故只邀請跟他的住在同一個城市的

“SendEventInvite” 送出邀請函。其中一個參數 “isValid” 其實是個條件審查函式,檢 查住址是台北的話回傳 true 。

在圖 4-10 下半段的程式碼中,是個更複雜的程式碼組織結構,包函了巢狀結構,

在 AspectW 的 Do 函式內的主功能程式碼區塊,還內函另一個 AspectW 陳述句。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

圖 4.9 Organizing a Facebook Event – scenario

圖 4.10 Case Study : Organizing a Facebook Event with AspectW

這個例子也是前面數個單獨機制的綜合應用,前面三個基本機制 Basic Retry、

Parameterized Retry、Recovery From Multiple Exception 同時使用。在

“SendEventInvite”函式中,加入好幾項非主功能機制,在一般的程式碼撰寫方法想找

下半段程式碼,“foreach(Person friend in friends.Get(me))”取得“me”也就是

“Alen”的好友清單,再一一向好友“friend” 用指令 “SendMessage(friend, message, protocol)” 送出邀請訊息。其中的參數“message”放的就是邀請訊息。

其它部份都是非主功能機制,在前面的例子多已說明過。在下半段巢狀結構內的 AspectW 陳述句內有個指令“WhenTrue”這個指令的功能是當參數為“true”時才執行由 Do()包裹的程式碼區塊。仔細看一下這一句程式碼“WhenTrue(isValid(address))”,其 意指當調用函式“isValid(address)”回傳值為“true”也就是說:當“Alen”好友的住址是

“Taipei”時才成立,也才送出邀請參加派對的訊息。

這是個複合性的案例,也是個較接近真實狀況案例。雖是以 Facebook 為案例標的,

其實在其它各類的社交應用系統都有類似的操作行為。這些訊息或指令在網路傳遞的程 式碼大概都有一個特性,就是非主功能機制比主功能邏輯還多,會有這現象主要是對品 質的要求。補獲與重試機制並不是治根的方案,但可讓故障機率下降。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

第5章 結論與建議 5.1 結論

補獲與重試(catch and retry)與 AOP 搭配應用的研究並非新顈的研究項目,但我們重 新思考 AOP 的源由與價值,也引用新的方法與新技術設計實作了“AspectW”。在語法 設計上我們採用“流利介面(fluent interface)”,實作原理主要是 lambda expression (非新觀念,但近幾年才又被重視並實作到 C#)。

我們分析了補獲與重試機制的應用行為,並設計了相應的五個指令型。我們重新思 考與評估我們所有找得到的 AOP 實作方案。我們發現了“AspectF”,一個特別的 AOP 實現方案,使用上可用“流利(fluent)”來形容。我們花了些時間去分析它的設計,以 觀念來看它更注重「縫合」這一觀點。我們以它為基礎設計了 AspectW。硬是要用一句 話來道出它的特徵那就是“程序導向’’,這只是相對的因為它本身可是物件。

AspectW 延用了 AspectF 的核心碼在剖面功能剖份以補獲與重試應用重新打造。在 試用多次後發覺一件事,在套用 AspectW 開發程式碼過程變成「二維式」了。在這之前 寫程式就是由上往下寫,這一個方向的開發過程可以用一個維度來形容。比較有套用 AspectW 就不一樣了,撰寫程式碼時由上往下只須考慮主功能邏輯即可,而非主功能機 制須橫切(cross-cutting)進去與主功能邏輯縫合成一體,這過程主要由左向右撰寫程 式碼,在縫合過程兩個方向的邏輯並非有關聯,但也不是沒有關係不然就不會組合成一 體,這樣組織整體流程程式碼的過程感覺像有二個維度。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

AOP 的觀念啟發了我們對軟體系統開發與設計的新看法,有些事物是無法向下切割 成子元件的。補獲與重試機制或說是現象,對於現在或至少是近未來的雲端運算系統的 品質觀點也有了新的啟發。

5.2 未來發展

在以 AspectW 支援補獲與重試機制的幾個規格項目中,其中一項“交易(transaction)”

未達成改以還原(restore)代替。這裡的“交易”是指「應用程式狀態」的交易機制,其 實這已是另一個研究主題以 STM(Software Transactional Memory)為主。因 STM 技術尚 未成熟故決定不採用,未來若成熟後就可以引入。另外在試用了多次後,認為未來研究 可以加入幾個項目:

一、引入 STM。若未來技術成熟的話。

二、主功能與非主功能狀態交換。這一點在一般的 AOP 上是沒有的,不過試用多次 套用 AspectW 縫合主功能與剖面功能時發現似乎是需要的,這一點還要再詳細檢驗看 看。而若要導入的話應該可以套用 GoF 的 mediator pattern 來設計。

三、程式語言直接支援縫合的關鍵字與語法。若程式語言直接支援讓編譯器在編譯 時就進行主功能與剖面功能縫合是最好的解了。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

參考文獻

【1】 Gregor Kiczales, John Lamping, Anurag Mendhekar, Chris Maeda, Cristina Videira Lopes, Jean-Marc Loingtier, John Irwin. (June 1997). Aspect-Oriented Programming. Published in proceedings of the European Conference on Object-Oriented Programming (ECOOP), Finland. Springer-Verlag LNCS 1241. June 1997.

http://www.cs.ubc.ca/~gregor/papers/kiczales-ECOOP1997-AOP .pdf , May 2014

【2】 陳恭,「剖面導向程式設計(AOP/AOSD)簡介」, 政大資科系, Last revised: May 14, 2007

http://www.cs.nccu.edu.tw/~chenk/AOP-intro.pdf , May 2014

【3】 Emre Kıcıman, Benjamin Livshits, Madanlal Musuvathi (October 2009). CatchAndRetry: Extending Exceptions to Handle Distributed System Failures and Recovery, Microsoft Research.

PLOS 09, October 11, 2009, Big Sky, Montana, USA. Copyright 2009 ACM 978-1-60558-844-5/09/10


http://research.microsoft.com/en-us/um/people/livshits/pap

ers/pdf/plos09.pdf , May 2014

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

【4】 Bruno Cabral, Paulo Marques (Sep. 2009). Implementing Retry - Featuring AOP. 4th Latin-American Symposium on Dependable Computing (LADC'09), September 2009 


http://pmarques.dei.uc.pt/papers/bcabral_pmarques_ladc09.p df , May 2014

【5】 系統架構設計 第 14 章,和春技術學院


http://el.fotech.edu.tw/localuser/kjyang/992/SA/ch14.ppt ,

May 2014

【6】 AOP 入門,Spring 技術手冊第四章


http://www.dotspace.idv.tw/Book/chap4.pdf , May 2014

【 7 】 Matthew D. Groves (June 2013). AOP in .NET - Practical Aspect-Oriented Programming - chapter 1,2, Copyright 2013 Manning Publications. ISBN: 9781617291142

http://www.manning.com/groves/ , May 2014

【8】 Aspect-oriented programming, Wikipedia, modified on 1 Feb. 2014.

http://en.wikipedia.org/wiki/Aspect-oriented_programming ,

May 2014

【9】 Omar Al Zabir (11 Jun 2011). AspectF Fluent Way to Add Aspects

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

for Cleaner Maintainable Code. 


http://www.codeproject.com/Articles/42474/AspectF-Fluent-W ay-to-Add-Aspects-for-Cleaner-Main , May 2014

【10】 Fluent interface, wikipedia

http://en.wikipedia.org/wiki/Fluent_interface , May 2014

【11】 如何使用 AspectJ Compiler 開發 AspectJ 程式 (2006-05-10)
 https://sites.google.com/site/swankyhsiao/aspectj-with-ajc ,

May 2014

【12】 Dominik Stein (2002). An Aspect-Oriented Design Model Based on AspectJ and UML – chapter 3: AspectJ. submitted to the Department of Business Arts, Economics, and Management Information Systems, University of Essen, Germany .


http://www-stud.uni-essen.de/~sw0136/wissensArbeiten/Diplo marbeitDIIDominikStein.pdf , May 2014

【13】 Dominik Stein, Stefan Hanenberg, and Rainer Unland (2002).

An UML-based Aspect-Oriented Design Notation For AspectJ.

Institute for Computer Science, University of Essen, Germany.

AOSD 2002, Enschede, The Netherlands. Copyright 2002 ACM

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

1-58113-469-X/02/0004 .

http://www.dawis.wiwi.uni-due.de/uploads/tx_itochairt3/pub lications/StHaUn_AspectOrientedDesignNotation_AOSD_2002.pd f, May 2014

【14】 Mohsen (February 23, 2008). Using AspectJ and Java Annotations to Try Again.


 http://zoftware.blogspot.tw/2008/02/using-aspectj-and-ja va-annotations-to_23.html , May 2014

【 15 】 Arulkumaran Kumaraswamipillai (July 2007). Creating Java custom annotations with Spring aspectj AOP


http://java-success.blogspot.tw/2013/07/creating-java-cust om-annotations-with.html?utm_source=tuicool , May 2014

【16】 C#程式語言,維基百科。


http://zh.wikipedia.org/wiki/C♯ , May 2014

【17】 Windows 7,維基百科。


http://zh.wikipedia.org/wiki/Windows7 , May 2014

【18】 Microsoft Visual Studio,維基百科。


http://zh.wikipedia.org/wiki/Visual_Studio_2010 , May 2014

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

【19】 .NET Framework,維基百科

http://zh.wikipedia.org/wiki/.NET 框架 , May 2014