隨筆 - 115  文章 - 481  trackbacks - 0
          <2007年8月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          常用鏈接

          留言簿(19)

          隨筆檔案(115)

          文章檔案(4)

          新聞檔案(1)

          成員連接

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          這是[挑戰(zhàn)MVC極限]EasyJWeb-1.0特性的第四篇文章,今天主要介紹零配置及慣例代替配置。

          配置是好還是壞

            首先,我承認(rèn)配置是好東西,它能夠通過修改程序以外的數(shù)據(jù)來改變系統(tǒng)的運(yùn)行性質(zhì)或功能,大大提高了系統(tǒng)的靈活性,可維護(hù)性,從而延長了一個(gè)系統(tǒng)的存活期。
            跟其它任何事情一樣,物極必反。當(dāng)一個(gè)好的東西泛濫成災(zāi)的時(shí)候,我們也會(huì)產(chǎn)生厭惡,走向另外一個(gè)極端。而縱觀今天我們正統(tǒng)的JavaEE應(yīng)用,配置可謂無處不在,由于過分的強(qiáng)調(diào)了靈活性、可擴(kuò)展性、可選擇性,大到Spring小到log4j的各種框架、輔助工具都會(huì)提供配置文件來改變他們的運(yùn)行屬性。一個(gè)JavaEE應(yīng)用往往需要到很多的框架及輔助工具,比如Spring的bean配置文件、dwr配置文件,hibernate的對象-關(guān)系映射文件、struts的配置文件、驗(yàn)證文件等。好大一堆啊,我們看看appfuse中的配置文件,而維護(hù)這些配置文件,并非一個(gè)簡單的事兒。

          如何簡化配置

            為了解決過度“配置”給我們帶來的配置恐懼病,唯一的辦法是簡化配置。
            我們?nèi)绾魏喕渲茫古渲帽M量的少,盡量的簡單,甚至把配置減到零呢?在整個(gè)java社區(qū),有很多人在做著這樣事兒。減化的流程大致如下:
            第一步:使用注解,把不是頻繁變動(dòng)的配置信息從外部配置文件遷移到與這些配置緊密聯(lián)系的java文件中,可以減少2/3以上的配置信息。
            第二步:一些具有很多習(xí)慣性的配置屬性,可以通過慣例約定的方式,來代替配置,從而又可以減掉一部分配置。
            第三步:最后余下的即是跟程序運(yùn)行環(huán)境緊密相關(guān),易變的配置文件。比如針對數(shù)據(jù)庫連接信息dataSource的配置。
            這樣就可以在不影響系統(tǒng)的靈活性、可擴(kuò)展性、移植性的情況下,最大限度地減化了配置。

          零配置

            EasyJWeb在開發(fā)的過程中,在配置處理上,一直把減化配置作為一個(gè)重點(diǎn)注意事項(xiàng),并實(shí)現(xiàn)了零配置。有了零配置支持,你可以不寫一句配置文件,就能實(shí)現(xiàn)立體感超強(qiáng)的JavaEE應(yīng)用。dao、service、module、action等,都會(huì)按照慣例約定的方式來工作。
            比如,我們需要寫一個(gè)用戶登錄的Action,可以在com.easyjweb.action這個(gè)包下面,添加一個(gè)名為LoginAction的類,可以繼承AbstractPageAction或者直接實(shí)現(xiàn)IWebAction接口。 使用AbstractPageAction能自動(dòng)識別模板,實(shí)現(xiàn)起來最簡單,代碼內(nèi)容如下:
          public class NewsAction extends AbstractPageCmdAction {
          public Page login(WebForm form,Module module)
          {
           
          if("xiaoxiao".equals(form.get("name"))&&"123".equals(form.get("password")))
           
          {
            
          return module.findPage("success");
           }

           
          else return module.findPage("index");
          }
           
          在WEB-INF/views/login/目錄中,存放兩個(gè)文件,一個(gè)是名為index.html,主要是登錄表單;另外一個(gè)是success.html,內(nèi)容為登錄成功提示頁面。
          這樣即可通過/login.ejf來訪問這個(gè)登錄應(yīng)用。
          由此可見,我們確實(shí)不需要一句配置文件,就能讓EasyJWeb這個(gè)MVC框架運(yùn)轉(zhuǎn)起來。

          慣例(約定)代替配置

            在上面“零配置”示例中,我們沒有使用一句配置文件,在這里EasyJWeb中的“慣例(約定)代替配置”功能起了非常大的作用。按約定方式來尋找Action、尋找視圖模板頁面。才使得mvc能工作起來。
            慣例代替配置,可以大大提高軟件的生產(chǎn)力。在EasyJWeb中,很多地方都使用慣例代替配置,下面進(jìn)一步介紹智能頁面查詢,這是一個(gè)慣例代替配置的例子。
          在一個(gè)基于AbstractPageCmdAction的模塊PersonAction中,有下面的方法:

          public void doEdit()
          {
          }

          public void doList()
          {
          }


            其中doEdit方法中可以不包含一句代碼,也不需要有任何視圖模板的代碼。EasyJWeb在沒有找到針對該模塊相關(guān)Page配置的情況下,此時(shí)會(huì)自動(dòng)應(yīng)用“慣例代替配置”的功能,從而找到/views/person/edit.html作為doEdit的頁面模板;同理,EasyJWeb的“慣例代替配置”還會(huì)把/views/person/list.html作為doList的頁面模板。
          除了模板以外,在代碼生成,JPA Entity標(biāo)簽處理、通用業(yè)務(wù)封裝,驗(yàn)證等均引入了“慣例代替配置”。在我們的實(shí)踐中,“慣例代替配置”確實(shí)是一個(gè)非常牛的東西,他們幫我們省了很多事兒。

          posted on 2007-08-15 15:38 簡易java框架 閱讀(1383) 評論(4)  編輯  收藏

          FeedBack:
          # re: 零配置及慣例代替配置 2007-08-15 17:20 編程、設(shè)計(jì)是職業(yè)更是愛好
          濫用的配置文件相當(dāng)于緊箍咒,看上去美妙,戴上去...  回復(fù)  更多評論
            
          # re: 零配置及慣例代替配置 2007-08-15 22:58 BeanSoft
          最近教學(xué)生用 Struts, Spring, Hibernate 整合開發(fā), 天啊, 各種錯(cuò)誤都讓你累個(gè)半死, 一多半是配置文件的錯(cuò)誤....  回復(fù)  更多評論
            
          # re: 零配置及慣例代替配置 2007-08-16 09:06 terrybean
          樓主介紹的這個(gè)框架看起來確實(shí)不錯(cuò)。  回復(fù)  更多評論
            
          # re: 零配置及慣例代替配置 2007-08-16 10:34 mingj
          ...框架的侵入性也太強(qiáng)了一點(diǎn)
            回復(fù)  更多評論
            

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 汝南县| 弥渡县| 鄂托克旗| 正蓝旗| 城步| 德钦县| 玉龙| 宁波市| 仪征市| 禄丰县| 故城县| 商都县| 曲周县| 北票市| 岱山县| 海晏县| 辛集市| 习水县| 秦皇岛市| 苏尼特右旗| 宣城市| 萨嘎县| 福安市| 花莲市| 电白县| 霍林郭勒市| 盈江县| 长乐市| 正安县| 敦化市| 云南省| 大余县| 南宁市| 马边| 内黄县| 秦安县| 辽源市| 九台市| 遂昌县| 望奎县| 循化|