區(qū)分
AOP、OOP在字面上雖然非常類(lèi)似努咐,但卻是面向不同領(lǐng)域的兩種設(shè)計(jì)思想苦蒿。OOP(面向?qū)ο缶幊蹋┽槍?duì)業(yè)務(wù)處理過(guò)程的實(shí)體及其屬性和行為進(jìn)行抽象封裝,以獲得更加清晰高效的邏輯單元?jiǎng)澐帧?/p>
而AOP則是針對(duì)業(yè)務(wù)處理過(guò)程中的切面進(jìn)行提取渗稍,它所面對(duì)的是處理過(guò)程中的某個(gè)步驟或階段刽肠,以獲得邏輯過(guò)程中各部分之間低耦合性的隔離效果溃肪。這兩種設(shè)計(jì)思想在目標(biāo)上有著本質(zhì)的差異。
上面的陳述可能過(guò)于理論化音五,舉個(gè)簡(jiǎn)單的例子惫撰,對(duì)于“雇員”這樣一個(gè)業(yè)務(wù)實(shí)體進(jìn)行封裝,自然是OOP/OOD的任務(wù)躺涝,我們可以為其建立一個(gè)“Employee”類(lèi)厨钻,并將“雇員”相關(guān)的屬性和行為封裝其中。而用AOP設(shè)計(jì)思想對(duì)“雇員”進(jìn)行封裝將無(wú)從談起坚嗜。
同樣夯膀,對(duì)于“權(quán)限檢查”這一動(dòng)作片斷進(jìn)行劃分,則是AOP的目標(biāo)領(lǐng)域苍蔬。而通過(guò)OOD/OOP對(duì)一個(gè)動(dòng)作進(jìn)行封裝诱建,則有點(diǎn)不倫不類(lèi)。
換而言之碟绑,OOD/OOP面向名詞領(lǐng)域俺猿,AOP面向動(dòng)詞領(lǐng)域。
關(guān)系
很多人在初次接觸AOP的時(shí)候可能會(huì)說(shuō)格仲,AOP 能做到的押袍,一個(gè)定義良好的 OOP 的接口也一樣能夠做到,我想這個(gè)觀點(diǎn)是值得商榷的凯肋。AOP和定義良好的 OOP 的接口可以說(shuō)都是用來(lái)解決并且實(shí)現(xiàn)需求中的橫切問(wèn)題的方法谊惭。但是對(duì)于 OOP 中的接口來(lái)說(shuō),它仍然需要我們?cè)谙鄳?yīng)的模塊中去調(diào)用該接口中相關(guān)的方法侮东,這是 OOP 所無(wú)法避免的圈盔,并且一旦接口不得不進(jìn)行修改的時(shí)候,所有事情會(huì)變得一團(tuán)糟悄雅;AOP 則不會(huì)這樣驱敲,你只需要修改相應(yīng)的 Aspect,再重新編織(weave)即可煤伟。 當(dāng)然,AOP 也絕對(duì)不會(huì)代替 OOP木缝。核心的需求仍然會(huì)由 OOP 來(lái)加以實(shí)現(xiàn)便锨,而 AOP 將會(huì)和 OOP 整合起來(lái),以此之長(zhǎng)我碟,補(bǔ)彼