這幾天在看AOSD,有一些疑惑。
在網上找了些資料:
http://canonical.blogdriver.com/canonical/639784.html
http://gigix.blogdriver.com/gigix/646694.html
http://webseminar5.unix105.cn4e.com/webseminar/AOSD.ppt
http://sunshineormer.blogdriver.com/sunshineormer/847906.html
看這個圖。

對應這段話:“Jacobson指出每一個use case是一個功能切片(slice), 并為use case中的概念找到了相應的程序對應物,因而可以在后期通過AOP技術將use case slice織入到系統基礎架構中,從而構成一種全程建模技術。use case中的generalization可以對應于對象繼承, 包含(include)可以對應于對象組合和調用, 而擴展(entension)就對應于AOP。某些use case具有共性,如常見的CURD(Create,Update,Read, Delete)操作,可以被抽象為參數化的use case, 這可以對應于模板(template)概念。”
結合原書:
如果Reservation里面的Create(),Consume()可以真的分解,Create()和Consume()的沒有任何關系的話,為何還要將他們放在Reservation里面呢?就是為了OO,為了要把這兩個動作放在一個類里面?
我的意思是,如果真的用例之間可以被切開,解決所說的“Tangling”問題,那為何不在實現的時候 也把他們分開呢,每個用例一個類(類似于面向過程編程)?而不是借助于AOP這樣的一個中介(貌似的隔離),最后還是將多個用例之間的代碼混雜在一起呢???既然AOSD把他們放在了一個類里面,那么就說們這兩個內容確實存在著“Tangling”問題的,而這個問題是在用例分析階段就該明確的。既然存在著“Tangling”,那么又怎么有一個“切片”,將他們隔開呢?
AOSD中也發現一些內容(基礎結構,即領域模型)是無法在多個用例之間切開的,所以又提出了“公共用例”、“基礎用例”來彌補一些其原型的漏洞。 到現在為止,我還沒發現AOSD中用例切片、用例模塊能夠多少真正解決問題的思路。
事實上,如果真的沒有關系的用例,顯然也可以在OOA/OOD的過程中分開來,而無須這里的AOSD所介紹的這些手段。
當然,對于擴展用例以及非功能性需求,AOSD介紹的內容還是相當不錯的。
繼續研習中!。。。