本文**自:
軟體設計因為引入物件導向思想而逐漸變得豐富起來。
「一切皆為物件
」的精義,使得程式世界所要處理的邏輯簡化,開發者可以用一組物件以及這些物件之間的關係將軟體系統形象地表示出來。而從物件的定義,進而到模組,到元件的定義,利用物件導向思想的封裝、繼承、多型的思想,使得軟體系統開發可以向搭建房屋那樣,循序漸進,從磚石到樓層,進而到整幢大廈的建成。應用物件導向思想,在設計規模更大、邏輯更複雜的系統時,開發周期反而能變的更短。自然其中,需要應用到軟體工程的開發定義、流程的過程控制,乃至於質量的缺陷管理。但從技術的細節來看,物件導向設計技術居功至偉。然而,物件導向設計的唯一問題是,它本質是靜態的,封閉的,任何需求的細微變化都可能對開發進度造成重大影響。
可能解決該問題的方法是設計模式。
gof將物件導向軟體的設計經驗作為設計模式紀錄下來,它使人們可以更加簡單方便地復用成功的設計和體系結構,幫助開發人員做出有利於系統復用的選擇。設計模式解決特定的設計問題,使物件導向設計更靈活、優雅,最終復用性更好。然而,設計模式雖然給了我們設計的典範與準則,通過最大程度的利用物件導向的特性,諸如利用繼承、多型,對責任進行分離、對依賴進行倒置,面向抽象,面向介面,最終設計出靈活、可擴充套件、可重用的類庫、元件,乃至於整個系統的架構。在設計的過程中,通過各種模式體現了物件的行為,暴露的介面,物件間關係,以及物件分別在不同層次中表現出來的形態。然而鑑於物件封裝的特殊性,
「設計模式
」的觸角始終在介面與抽象中大做文章,而對於物件內部則無能為力。
aspect-oriented programming
(面向方面程式設計,
aop)正好可以解決這一問題。它允許開發者動態地修改靜態的
oo模型,構造出乙個能夠不斷增長以滿足新增需求的系統,就象現實世界中的物件會在其生命週期中不斷改變自身,應用程式也可以在發展中擁有新的功能。
aop利用一種稱為「橫切
」的技術,剖解開封裝的物件內部,並將那些影響了多個類的行為封裝到乙個可重用模組,並將其名為
「aspect」
,即方面。所謂「方面
」,簡單地說,就是將那些與業務無關,卻為業務模組所共同呼叫的邏輯或責任,例如事務處理、日誌管理、許可權控制等,封裝起來,便於減少系統的重複**,降低模組間的耦合度,並有利於未來的可操作性和可維護性。
面向方面程式設計(
aop)是施樂公司帕洛阿爾托研究中心(
xerox parc
)在上世紀
90年代發明的一種程式設計正規化。但真正的發展卻興起於近幾年對軟體設計方興未艾的研究。由於軟體系統越來越複雜,大型的企業級應用越來越需要人們將核心業務與公共業務分離。
aop技術正是通過編寫橫切關注點的**,即「方面
」,分離出通用的服務以形成統一的功能架構。它能夠將應用程式中的商業邏輯同對其提供支援的通用服務進行分離,使得開發人員從重複解決通用服務的勞動中解脫出來,而僅專注於企業的核心商業邏輯。因此,
aop技術也就受到越來越多的關注,而應用於各種平台下的
aop技術也應運而生。但由於
aop技術相對於成熟的
oop技術而言,在效能、穩定性、適用性等方面還有待完善,同時
aop技術也沒有形成乙個統一的標準,這使得
aop技術的研究更具有前沿性的探索價值。
初識Rust(一) 引言
rust 是乙個全新的程式語言,專注於效能,並行和記憶體安全。rust的創始人通過從零開始並結合現代程式語言的設計元素來建立乙個語言,避免了很多傳統語言需要應對的很多 baggage 向後相容需求 相反,rust可以融合有表現力的語法和高層語言的靈活性與前所未有的控制和底層語言的效能。選擇一款程式語...
Mycat學習筆記一(引言)
1.3 資料庫切分原則 2.什麼是mycat 前言 隨著網路的普及,網際網路技術的發展以及網路裝置和傳輸介質等硬體的更新換代,使得網際網路使用者迅速增長,網速大大提高,由此產生了海量的應用資料,很多網際網路業務,隨著資料量的逐步增加,資料庫逐漸成為系統的瓶頸,資料庫切分技術和分布式資料庫由此誕生。結...
Flask學習筆記(一) 引言
python web框架裡比較有名當屬django,django功能全面,它提供一站式解決方案,整合了mvt model view template 和orm,以及後台管理。但是缺點也很明顯,它偏重。就像是乙個裝潢好的房子,它提供好了你要用的東西,直接拿來用就可以。flask相對於django而言是...