我想了解AOP中使用的問題的分離。因此,如果有人能夠解釋我使用一些基本的HelloWorld示例代碼散佈和代碼在AOP中纏繞是什麼,我將不勝感激。事後我會怎麼知道一個給定的問題不是系統核心問題,而是一個方面?非常感謝。什麼是aop中的散射和纏結
1
A
回答
4
恐怕我會用日誌記錄作爲例子,這是我們經常使用的一個例子,但我希望它能夠讓我們很容易理解。考慮這個helloworld程序日誌記錄:
public class HelloWorld {
private static Logger logger = Logger.getLogger(HelloWorld.class);
public static void main(String []argv) {
logger.entering("HelloWorld","main");
System.out.println("Hello World");
logger.exiting("HelloWorld","main");
}
}
我班只有8行(忽略空格) - 其中3記錄,幾乎一半!日誌記錄與打印Hello World
這個班級的主要目標無關。記錄是糾結與本課程的主要目標。如果我們可以移除它並以另一種方式表達,那麼我們將擁有一半的代碼,而班級主要嘗試實現的內容將更加清晰。此外,糾結可能會損害像重用這樣的功能 - 如果沒有它執行某些日誌記錄並需要某種日誌記錄基礎結構,則無法使用此代碼打印helloworld。
現在考慮一個真正的系統,其中有多個類,他們都在做日誌記錄。現在假設我決定改變我正在使用的日誌記錄方法之一 - 我希望我所有撥打entering
的電話都改爲info
幷包含一些額外的信息。惡夢!我的日誌記錄是分散在我的代碼庫中的。沒有一個地方可以做出這種改變,可能會有成千上萬。
如果我在一個方面捕捉到分散的橫切關注點,那麼只會有一個地方進行更改。
確定什麼可能是一個方面:
- 考慮你的類的主要功能 - 什麼是他們從根本上正在修建的。是否有其他代碼並不嚴格與此相關,但您發現您需要這樣做(例如開始並提交事務,使用某個安全服務進行身份驗證)。
- 你是否發現自己做了一遍又一遍的非常類似的事情 - 無論是跨多個班級,還是僅僅在一個班級中的多個方法。
散射可能是一個小規模的問題。也許每個類中的每個方法都重複某種模式,但沒有其他類正在使用它。在爲這個課程創建一個小方面,而不是僅僅解決這些方法中的散佈問題上沒有什麼壞處
相關問題
- 1. 什麼是一起createjs雪碧纏結在一起的實例?
- 2. R:ggplot2中散射形狀的默認排序是什麼
- 3. 什麼是Spring框架中的自動裝配和AOP?
- 4. 包裝纏結指數數據在Sonar中顯示的是什麼?
- 5. 奇怪纏結
- 6. 結合散射和customBars在Dygraphs
- 7. 你使用AOP嗎?和什麼?
- 8. 什麼是irb中使用的「散列」?
- 9. 什麼是離散動畫?
- 10. 「散貨」是什麼意思?
- 11. 什麼是密碼/散列?
- 12. 什麼是散列函數?
- 13. 是什麼結構和類
- 14. Spring AOP錯過了什麼
- 15. MATLAB中的散射映射(散射) - NaN的MarkerEdgeColor
- 16. 什麼纏鬥路徑圖案Restkit
- 17. 什麼是hashSet結構,hashCode方法和散列桶之間的交互?
- 18. C++中的映射函數是什麼?
- 19. 什麼是PHP中的反射類?
- 20. 傳遞結構散射功能的MATLAB
- 21. 在ThreeJS中結合THREE.ShaderLib.phong和次表面散射
- 22. 爲什麼System.Int32是結構和System.String是
- 23. 類對象的HashSet。什麼是散列?
- 24. 什麼是鬆散耦合的代碼?
- 25. 這是什麼樣的散列/加密?
- 26. 這是什麼樣的散列加密?
- 27. 散居的安全問題是什麼?
- 28. 這是什麼樣的散列?
- 29. 鬆散XAML的侷限性是什麼?
- 30. 這是什麼樣的散列文件?