by Narayanan A.R. June 15, 2005
翻譯zhangv (derekzhangv.at.hotmail.com)
原文:Java/Article/28422/0/page/1″>http://www.devx.com/Java/Article/28422/0/page/1
方面vs 面向對象編程:甚麼時候使用,該使用哪個?
面向方面編程( AOP)聲稱它關註的是傳統面相對象編程(OOP)不能完全或直接解決的問題.下面將對兩種技術進行行行(line-by-line)比較來找出這種說法對在何處.
像大多數開發人員一樣,我已經使用OOP進行開發多年瞭.因此,當我發現AOP強調的很多傳統 OOP無法完全或直接解決的問題時,我覺得有必要來研究一下它如何有助於應用程序的開發.比較這兩種技術將為我們提供一些在實際應用中很有用的見解.這裡我設計瞭一個案例:一個OOP應用程序,其中在某些方面適合使用 AOP.
本文展示瞭一個簡單的例子.一開始介紹瞭問題域,然後給出兩種解決方案:一種使用OOP,一種使用AOP.後者使用瞭 JDK1.5,JUnit,和AspectWerkz.最後說明如何編寫代碼.
在本文最後,你會知道所需知道的一切關於使用AOP的隻是,包括它在軟件設計中試圖要解決的問題.
問題域描述
一個軟件公司雇傭一個程序員,指定給他一個業務部門並要求他隨時向經理報告.當團隊成員完成他們的目標時,經理會給他們相應的積分.公司所需要的方案必須能夠增加一個新的雇員並給當前的員工增加積分.為瞭方便,我們用CSV文件存儲數據.
圖1 解決方案模型
類Manager(經理)繼承自類Employee,包含一個額外的屬性,Managing Project.一個部門可能包含很多員工.多個部門構成瞭公司.暫不考慮公司這樣的一個類,因為它在問題域之外.
解決方案設計
以下流程圖描述瞭解決方案設計.
圖2 對象之間的交互(增加一個新的員工,指派給他一個部門和經理)
為瞭簡單,本文隻關註必須的細節.不過,您也可以深入研究代碼來獲取一些其他的信息.
[link]http://www.devx.com/assets/sourcecode/13172.zip[/link]
EmployeeServiceTestCase,一個JUnit測試用例類,模擬一個最終用戶,創建新員工記錄,指派部門和經理.它獲取所有可用的部門和經理數據並顯示在圖形界面上.為瞭實例化域對象BusinessUnit和Manager,獲得的記錄將傳遞給工廠類.之後,通過給EmployeeService傳遞一個引用來創建一個Employee對象.這個服務類使用EmployeeFactory創建對象,並把這個對象傳給EmployeeRepository 來進行持久化操作.