2011-01-27 202 views
21

面向方面的編程是一個非常難以找到任何好信息的主題。我的舊軟件工程教科書只是簡單地(隱約地)提及它,維基百科和其他各種教程/文章都能給我們提供超學術的,高度抽象的定義,它們是什麼,如何使用它以及何時使用它。定義我似乎不明白。AOP基礎知識

我(很差)AOP的理解是,有生產高品質的軟件系統,它並不完全適合一個漂亮的小凝聚力包的許多方面。某些類,如記錄器,驗證器,數據庫查詢等將在整個代碼庫中使用,因此將會高度耦合。我的(同樣,非常差差)對AOP的理解是它關心的是如何處理這些「通用耦合」包的最佳實踐。

問:這是真的,還是我完全關閉?如果我完全錯了,有人可以給一個簡潔的外行解釋AOP是什麼,一個所謂的方面的例子,甚至可能提供一個簡單的代碼示例?

+4

有趣的問題也很好的質疑。 – 2011-01-27 17:41:24

回答

12

問題的分離是軟件開發中的一個基本原則,David Parnas有一篇經典論文,可能會向您介紹該主題並且還會讀取Uncle Bob's SOLID Principles

但隨後有可能被包含在許多用例如身份驗證,授權,驗證,日誌,事務處理,異常處理,緩存等是產卵在軟件的所有層橫切關注點。如果你想解決這個問題沒有重複和採用DRY原則,你必須以一種複雜的方式處理它。

必須使用聲明式編程,簡單地在.net中可以通過屬性註釋的方法或屬性,什麼發生後正在改變的代碼在運行時根據這些標註的行爲。

你可以找到關於此主題的一個很好的章節中Sommerville's Software engineering book

相關鏈接 C2 wiki CrossCuttingConcernMSDNHow to Address Crosscutting Concerns in Aspect Oriented Software Development

+0

賈尼 - 感謝您的有益迴應和鏈接。我需要一些時間來「消化」它們,但我相信在週末之後我會有更多有教養的問題。我現在會考慮回答這個問題,因爲隨後的問題會更具體。再次感謝! – Eugie 2011-01-27 18:31:23

0

AOP是關於橫切關注點,即你需要在整個應用程序做的事情。例如日誌記錄。假設您想要在進入和退出方法時進行跟蹤。這方面很容易。你基本上爲一個事件指定一個「處理程序」,比如輸入一個方法。如果有必要,你也可以用「通配符」來指定你感興趣的方法,然後它只是編寫處理程序代碼的問題,例如可以記錄一些信息。

0

面向方面編程基本上是分離橫切關注點(非功能性),並制定它像安全,日誌記錄,監視器等方面一樣,只要你在你的應用程序中需要它,就可以使用它作爲插件&播放。只有乾淨的代碼,更少的代碼和程序員才能獲得的好處可以專注於業務邏輯(核心問題),從而可以開發出更好的模塊化和質量系統。