atitit.元編程總結 o99

atitit.元編程總結 o99.docjava

 

1. 元編程(Metaprogramming 1數據庫

2. 元編程的歷史and發展 1編程

3. 元類型and元數據 1緩存

4. 元編程實現方式 2服務器

4.1. 代碼生成 2數據結構

4.2. lexyacc分析器 2併發

4.3. 泛型編程 2框架

4.4. 註解 2工具

4.5. 解釋型框架 2性能

4.6. 對象工廠概念,一個會寫程序的程序! 3

4.7. Aop 3

4.8. 數據對象觸發器和 可配置的插入式服務 3

5. 應用場景 4

6. 參考 4

 

1. 元編程(Meta programming)

元編程(Metaprogramming)是指某類計算機程序的編寫,這類計算機程序編寫或者操縱其餘程序(或者自身)做爲它們的數據,或者在運行時完成部分本應在編譯時完成的工做。不少狀況下比手工編寫所有代碼相比工做效率更高。編寫元程序的語言稱之爲元語言,被操做的語言稱之爲目標語言。一門語言同時也是自身的元語言的能力稱之爲反射

 

就是將業務邏輯與實現代碼進行分離,僅用XML這類的描述性語言描述業務之間的映射關係,不須要寫實現代碼即完成編程。

 

 

做者:: 老哇的爪子 Attilax 艾龍,  EMAIL:1466519819@qq.com

轉載請註明來源: http://blog.csdn.net/attilax

 

2. 元編程的歷史and發展

 在1994年初露端倪,由一個叫 Erwin Unruh 的人首先發現。在1994年,C++標準委員會在聖迭戈(SanDiego)舉行的一次會議期間, Erwin Unruh展現了一段特別的代碼。這段代碼的特別之處在於程序的功能在編譯期實現而非運行期,編譯器錯誤信息的方式產生從2到某個給定值之間的全部質數。同年夏天, Todd Veldhuizen 受Erwin 的例子啓發,發現可使用C++模板進行元編程,並發表了一份技術報告

 

3. 元類型and元數據

 

類型的類型(泛型???) ,數據的數據爲元數據 (anno/attr)

4. 元編程實現方式

 

4.1. 代碼生成

「元編程」其實是「代碼生成」的一種別稱

 

能夠給它一小段代碼,讓它返回一段可執行的程序,或是一個能夠識別或重寫的解析樹

 

最經常使用的元編程工具是編譯器,把高級語言轉換爲彙編語言或機器語言。更靈活的方法是在程序中嵌入解釋器直接處理程序數據。有一些實現例如爲Object Pascal編寫的RemObject's Pascal Script。

 

4.2. lex和yacc分析器

另外一個很經常使用的元編程例子是lex和yacc,用來生成詞法分析器語法分析器。Yacc一般用做編譯器的編譯器,生成一個把高級語言轉換爲機器語言的工具。

 

因此,所謂模板元編程,你能夠理解爲:它把編譯器當成了更高層次的解釋器和運行時而已. 模板編程是產生式編程(好比泛型編程)

 

4.3. 泛型編程

4.4. 註解

註解在其中扮演了核心角色。其思想是經過註解夠告訴工具如何生成新代碼、轉換代碼或者決定運行期的行爲。以Java Persistence API(JPA)爲例,這也是Java 1.5引入的功能。它容許開發者以聲明的方式如@Entity,指定Java對象與數據庫實體之間的關係。而後Hibernate這類工具就可使用這些 註解,在運行期生成映射文件和SQL查詢。

 

4.5. 解釋型框架

Openbiz框架特別之處在於這是一個解釋型框架,至關於"編譯器"的角色。 當其它開發環境和框架致力於讓開發人員少寫代碼的時候,Rocky兄提出,別讓他們寫代碼了直接用簡單XML語言來描述映射關係即完成編程。

 

4.6. 對象工廠概念,一個會寫程序的程序!

每次提到這個概念都讓我激動不已,彷彿咱們距離智能化編程只有咫尺之遙。這個理念據我所知最早提出的是.Net的自省(這個漢語翻譯很詭異)這一律念,即由主程序動態建立出另外一個獨立的子程序,動態編譯,而後按需裝載及銷燬(跟變形金剛似的),當時看的我也十分激動,此後這個概念基本上就再也沒人提了。

 

直到後來我閱讀分析過了Openbiz的底層源代碼驚人地發現了基於PHP實現的對象工廠這一理念。剖析一下思路,以數據對象爲例:

基於XML的元數據文件被視爲發給"工廠"的裝配單,上面描述了應具體如何"組裝"這個對象,以及這個對象與地層數據庫的映射關係,與同層級的其它對象的映射關係(例如一對多的 ORM)

 

對象工廠接到建立這樣對象的生產指令後,按描述建立並組裝所需對象,並以串行化的方式將對象體和狀態緩存在系統內,爲再次觸發調用,而優化性能。直到元數據配置文件改變以前,對象只須要動態生產一次,即無限次使用。

 

4.7. Aop

 

4.8. 數據對象觸發器和 可配置的插入式服務

這個郵件和短信的觸發確定不該該在UI層實現,由於咱們要考慮無論訂單從何處被生成,都應觸發發送郵件這個邏輯。因此這個業務邏輯應該被耦合在數據對象上,即只要有訂單被生成就應當觸發該邏輯。

 

而發郵件和發短信些種常見的可重用性邏輯,能夠被定義爲pluginService, 例如在發郵件的Service中,收件人,標題,內容應當是API的參數,而發郵件的賬戶,SMTP服務器信息相對於業務整個系統來講一般變化不大,應做 爲元數據接口,而如何與服務器連接來發送郵件則是具體被重用的對象邏輯了。這種設計的精妙之處咱們將在下一篇文章中具體給你們分析

 

5. 應用場景

基於這種編程邏輯,咱們解決一個常見的修改和擴展問題。

例如:客戶常常會再項目驗收時提出底地層數據字段的修改,"您看聯繫人管理這個模塊,能不能再增長個 生日 和 喜愛 字段,要否則這尾款恐怕..."。 

怎麼辦?

改吧。增刪讀寫(CRUD),列取(List),搜索(Search)一個不能少全都要改。

誰改?

確定你改啊,由於是你寫程序。

 

Openbiz元數據就不同了,如今我只修改一個數據描述文件,而後是對象工廠會檢測到元數據配置文件發生改變,而後他來自動從新編寫對象和全部與其相關的映射調用(ORM)。 

 

當你面對的是一個業務偶合性特別複雜的系統時,你會發現這些上層對象"你中有我,我中有你"堆疊式調用複雜至極(噁心至極)。好比在文檔修改記錄的視圖中也調用了聯繫人的這幾個字段等,你肯定能一個不差的修改遍與這個數據結構的每個角落麼? 

此非人力所能爲也!但對象工廠能夠,由於是按需生產建立。

 

 

6. 參考

元編程_百度百科.htm

元編程_互動百科.htm

Java 8的類型註解:工具和機會 _Linux伊甸園開源社區-24小時滾動更新開源資訊,整年無休!.htm

源於java編程思想的Openbiz框架實現PHP的元數據編程_PHP_it動力.htm

我要啦免費統計
相關文章
相關標籤/搜索