2007年4月4日 星期三

爪哇人的Ruby(3) -- Meta Programming簡介

Meta Programming是什麼呢?讓我用白話一點的方式來說明:
就是可以動態更改Class的設定,可以新增成員變數,也可以新增方法,看一下以下這段程式:



str1 = "hello meta programming"

class String
  def to_html
    return "<p><b>" + self + "</b></p>\n"
  end
end

str2 = "author: richard"

# 輸出 <p><b>hello meta programming</b></p>
print str1.to_html

# 輸出 <p><b>author: richard</b></p>
print str2.to_html



有發現什麼神奇之處嗎?
是的,我在這簡短的程式中,加了一個新的to_html()的新方法到String類別定義中,所以之後所有的字串都能使用to_html()這個成員方法了。

這個功能除了可以讓你輕鬆的完成所謂的AOP之外,還可以做到一些Java做不到的事,回想一下使用Hibernate、JPA或是Entity Bean的步驟吧!
1. 在資料庫中建好Table及欄位
2. 在XML檔中設定物件的Getter、Setter和實際欄位的對應…(現在可以改用annotation,但還是不夠好)
3. 寫JavaBean,必須包含各欄位的Getter和Setter

一開始辛苦一次還可以,但如果每次的Schema更動都要把各種檔案掃過一次呢?那可就累了,不是嗎?

如果Java中的Hibernate或是JPA,可以在程式讀取資料庫表格Schema後,自動將Getter和Setter都產生,然後不再需要XML設定你複雜的O-R Mapping,那會是多麼美好呀!

這樣好用的工具已經有了,可惜是出現在Ruby上,希望以後Java也會有。

沒有留言: