atitit.元編程總結 o99.docjava
4. 元編程實現方式 2服務器
4.1. 代碼生成 2數據結構
元編程(Metaprogramming)是指某類計算機程序的編寫,這類計算機程序編寫或者操縱其餘程序(或者自身)做爲它們的數據,或者在運行時完成部分本應在編譯時完成的工做。不少狀況下比手工編寫所有代碼相比工做效率更高。編寫元程序的語言稱之爲元語言,被操做的語言稱之爲目標語言。一門語言同時也是自身的元語言的能力稱之爲反射。
就是將業務邏輯與實現代碼進行分離,僅用XML這類的描述性語言描述業務之間的映射關係,不須要寫實現代碼即完成編程。
做者:: 老哇的爪子 Attilax 艾龍, EMAIL:1466519819@qq.com
轉載請註明來源: http://blog.csdn.net/attilax
在1994年初露端倪,由一個叫 Erwin Unruh 的人首先發現。在1994年,C++標準委員會在聖迭戈(SanDiego)舉行的一次會議期間, Erwin Unruh展現了一段特別的代碼。這段代碼的特別之處在於程序的功能在編譯期實現而非運行期,編譯器以錯誤信息的方式產生從2到某個給定值之間的全部質數。同年夏天, Todd Veldhuizen 受Erwin 的例子啓發,發現可使用C++模板進行元編程,並發表了一份技術報告
類型的類型(泛型???) ,數據的數據爲元數據 (anno/attr)
「元編程」其實是「代碼生成」的一種別稱
能夠給它一小段代碼,讓它返回一段可執行的程序,或是一個能夠識別或重寫的解析樹
最經常使用的元編程工具是編譯器,把高級語言轉換爲彙編語言或機器語言。更靈活的方法是在程序中嵌入解釋器直接處理程序數據。有一些實現例如爲Object Pascal編寫的RemObject's Pascal Script。
另外一個很經常使用的元編程例子是lex和yacc,用來生成詞法分析器和語法分析器。Yacc一般用做編譯器的編譯器,生成一個把高級語言轉換爲機器語言的工具。
因此,所謂模板元編程,你能夠理解爲:它把編譯器當成了更高層次的解釋器和運行時而已. 模板編程是產生式編程(好比泛型編程)
註解在其中扮演了核心角色。其思想是經過註解夠告訴工具如何生成新代碼、轉換代碼或者決定運行期的行爲。以Java Persistence API(JPA)爲例,這也是Java 1.5引入的功能。它容許開發者以聲明的方式如@Entity,指定Java對象與數據庫實體之間的關係。而後Hibernate這類工具就可使用這些 註解,在運行期生成映射文件和SQL查詢。
Openbiz框架特別之處在於這是一個解釋型框架,至關於"編譯器"的角色。 當其它開發環境和框架致力於讓開發人員少寫代碼的時候,Rocky兄提出,別讓他們寫代碼了直接用簡單XML語言來描述映射關係即完成編程。
每次提到這個概念都讓我激動不已,彷彿咱們距離智能化編程只有咫尺之遙。這個理念據我所知最早提出的是.Net的自省(這個漢語翻譯很詭異)這一律念,即由主程序動態建立出另外一個獨立的子程序,動態編譯,而後按需裝載及銷燬(跟變形金剛似的),當時看的我也十分激動,此後這個概念基本上就再也沒人提了。
直到後來我閱讀分析過了Openbiz的底層源代碼驚人地發現了基於PHP實現的對象工廠這一理念。剖析一下思路,以數據對象爲例:
基於XML的元數據文件被視爲發給"工廠"的裝配單,上面描述了應具體如何"組裝"這個對象,以及這個對象與地層數據庫的映射關係,與同層級的其它對象的映射關係(例如一對多的 ORM)
對象工廠接到建立這樣對象的生產指令後,按描述建立並組裝所需對象,並以串行化的方式將對象體和狀態緩存在系統內,爲再次觸發調用,而優化性能。直到元數據配置文件改變以前,對象只須要動態生產一次,即無限次使用。
這個郵件和短信的觸發確定不該該在UI層實現,由於咱們要考慮無論訂單從何處被生成,都應觸發發送郵件這個邏輯。因此這個業務邏輯應該被耦合在數據對象上,即只要有訂單被生成就應當觸發該邏輯。
而發郵件和發短信些種常見的可重用性邏輯,能夠被定義爲pluginService, 例如在發郵件的Service中,收件人,標題,內容應當是API的參數,而發郵件的賬戶,SMTP服務器信息相對於業務整個系統來講一般變化不大,應做 爲元數據接口,而如何與服務器連接來發送郵件則是具體被重用的對象邏輯了。這種設計的精妙之處咱們將在下一篇文章中具體給你們分析
基於這種編程邏輯,咱們解決一個常見的修改和擴展問題。
例如:客戶常常會再項目驗收時提出底地層數據字段的修改,"您看聯繫人管理這個模塊,能不能再增長個 生日 和 喜愛 字段,要否則這尾款恐怕..."。
怎麼辦?
改吧。增刪讀寫(CRUD),列取(List),搜索(Search)一個不能少全都要改。
誰改?
確定你改啊,由於是你寫程序。
Openbiz元數據就不同了,如今我只修改一個數據描述文件,而後是對象工廠會檢測到元數據配置文件發生改變,而後他來自動從新編寫對象和全部與其相關的映射調用(ORM)。
當你面對的是一個業務偶合性特別複雜的系統時,你會發現這些上層對象"你中有我,我中有你"堆疊式調用複雜至極(噁心至極)。好比在文檔修改記錄的視圖中也調用了聯繫人的這幾個字段等,你肯定能一個不差的修改遍與這個數據結構的每個角落麼?
此非人力所能爲也!但對象工廠能夠,由於是按需生產建立。
元編程_百度百科.htm
元編程_互動百科.htm
Java 8的類型註解:工具和機會 _Linux伊甸園開源社區-24小時滾動更新開源資訊,整年無休!.htm
源於java編程思想的Openbiz框架實現PHP的元數據編程_PHP_it動力.htm