gembin

          OSGi, Eclipse Equinox, ECF, Virgo, Gemini, Apache Felix, Karaf, Aires, Camel, Eclipse RCP

          HBase, Hadoop, ZooKeeper, Cassandra

          Flex4, AS3, Swiz framework, GraniteDS, BlazeDS etc.

          There is nothing that software can't fix. Unfortunately, there is also nothing that software can't completely fuck up. That gap is called talent.

          About Me

           

          IoVC programming model[轉]

          IoVC,一種新的編程思想



          1. 概述

          長久以來,在Web編程中,一直很難克服的一個問題就是:展現層與業務數據糾纏在一起,無法進行良好的解耦, 從而造成應用系統的擴展性差,維護成本高。于是,出現了所謂的MVC框架,試圖以 Model-View-Control 這種非常流行的設計模式,將兩者有效的隔離開來。但回顧目前主流的 Web MVC 架構,它們所做的絕大部分工作無非是:將頁面中控件的值取出打包成 Java Bean;再無非就是在幫助你完成頁面導航的過程中,輔助你進行頁面參數的傳遞與分析。這樣一種“簡單 MVC”架構,是無法完全解決“展現層與業務數據完全解耦”這個問題的。 一旦你的需求超越了框架的能力,那么,你將面對的依然是:不得不在展現層中嵌入大量的 Script 代碼,可能是Java代碼片斷,也可能是大量tag-lib及EL表達式的引入。

          2. 什么是IoVC

          IoVC——“Inversion of View-Control”,即“視圖控制反轉”,換言之:它能夠把對“View(即 UI 視圖)的控制力”注入到你的后臺業務邏輯中。這樣一來,你在編寫業務邏輯的過程中,對 View 擁有足夠的控制力,從而能夠將展現層與業務邏輯完全的解耦。

          舉一個場景:頁面中有一個文本輸入框,它的值對應后臺的一個JavaBean的屬性。我們首先來看一下傳統的編程模型:

          頁面:
          <w:textField value="#{myBean.value}"/>

          后臺:
          public class MyBean {
          private String value;
          public String getValue() {
          return value;
          }
          public void setValue(String value) {
          this.value = value;
          }
          }

          此時,假設用戶需要發生變化,我們需要設置文本輸入框的tooltip,并且,它的值來自于后臺 JavaBean 的另一個屬性,那么,程序需要做如下調整:

          頁面:
          <w:textField value="#{myBean.value}" 1tooltip="#{myBean.tooltip}"/>

          后臺:
          public class MyBean {
          private String value;

          2private String tooltip;

          public String getValue() {
          return value;
          }
          public void setValue(String value) {
          this.value = value;
          }
          3public String getTooltip() {
          return tooltip;
          }
          4public void setTooltip(String tooltip) {
          this.tooltip = tooltip;
          }
          }

          我們可以觀察:在傳統的編程模型下,如果頁面邏輯發生變化,我們首先需要修改UI展現層,加上 tooltip="#{myBean.tooltip}" 的語句,然后,再在后臺Bean中設置此屬性值。

          那么,在IoVC編程模型下,情況又是怎樣的呢?

          頁面:
          <w:textField 1id="txt"/>
          后臺:
          public class MyBean {
          @Bind(id="txt")
          private String value;
          }

          如果需要擴展文本編輯框的tooltip屬性,只需要:

          頁面:
          <w:textField id="txt"/>
          后臺:
          public class MyBean {
          @Bind(id="txt")
          private String value;

          1@Bind(id="txt" att="tooltip")
          private String tooltip;
          }

          在IoVC編程模型下,Web頁面不需要發生任何變化,你只需要在后臺 Java Bean 中寫上這樣一行屬性聲明即可@Bind(id="txt" att="tooltip") private String tooltip,甚至于你連傳統的getter/setter都不需要。

          換言之,在傳統的編程模型下,頁面美工通過網頁設計工具“畫”出來的頁面,程序員看不懂; 而如果程序員對頁面進行修改,則頁面美工又無法理解; 并且,如果要更改業務邏輯,程序員需要不斷的維護頁面內容,最終造成頁面美工與程序員無法協同工作。而在 IoVC 的編程思想下,頁面美工只需要給每個組件設置一個ID,程序員在后臺的業務邏輯中,便擁有對頁面 UI 元素的完全控制力。Web頁面在美工完成之后,程序員再也無需因為需求的變更或者邏輯的變化,而再重新維護 Web頁面內容。

          簡而言之,IoVC是一種更好的MVC,是對MVC的一種高層次抽象。

          設想一下:日后美工人員畫出來的頁面(只要設置了正確的ID),程序員可以拿過來直接用,并且, 如果要對頁面做調整(只要不是頁面元素的增加或刪除),程序員可以在自己熟悉的代碼中直接設置,這豈非是一種很享受的境界?



          真的不錯啊............這樣會讓設計更靈活..........

          posted on 2008-03-05 16:37 gembin 閱讀(414) 評論(0)  編輯  收藏 所屬分類: JSF

          導航

          統計

          常用鏈接

          留言簿(6)

          隨筆分類(440)

          隨筆檔案(378)

          文章檔案(6)

          新聞檔案(1)

          相冊

          收藏夾(9)

          Adobe

          Android

          AS3

          Blog-Links

          Build

          Design Pattern

          Eclipse

          Favorite Links

          Flickr

          Game Dev

          HBase

          Identity Management

          IT resources

          JEE

          Language

          OpenID

          OSGi

          SOA

          Version Control

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          free counters
          主站蜘蛛池模板: 龙岩市| 永福县| 牟定县| 双桥区| 蓬溪县| 娄烦县| 安龙县| 敦化市| 渝北区| 乌恰县| 滨州市| 新营市| 满城县| 绥棱县| 邵武市| 宿松县| 嫩江县| 新民市| 大港区| 女性| 洛浦县| 类乌齐县| 邛崃市| 昭通市| 璧山县| 南雄市| 绥中县| 盐津县| 滁州市| 天津市| 禹州市| 温州市| 黄平县| 喀喇沁旗| 江口县| 车致| 于都县| 梧州市| 长阳| 扎兰屯市| 曲水县|