<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    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 閱讀(417) 評論(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
    主站蜘蛛池模板: 久久精品国产亚洲沈樵| 免费一级毛片不卡不收费| 久久精品国产亚洲AV网站| 中文字幕成人免费高清在线视频| mm1313亚洲精品无码又大又粗| 亚洲AV无码专区国产乱码不卡| 国产片免费福利片永久| 美女被免费视频网站a| 亚洲 综合 国产 欧洲 丝袜| 9久久免费国产精品特黄| 久久久久久久尹人综合网亚洲 | 在线观看av永久免费| 国产成人精品亚洲日本在线| 97视频热人人精品免费| 亚洲精品V天堂中文字幕| 国产精品久久免费视频| 伊人久久国产免费观看视频| 亚洲AV无码专区亚洲AV伊甸园| 91精品视频在线免费观看| 97久久国产亚洲精品超碰热| 日日操夜夜操免费视频| 国产免费AV片在线观看播放| 亚洲AV无码第一区二区三区| 91成年人免费视频| 亚洲日韩在线中文字幕综合| 国产AV无码专区亚洲AWWW| 88xx成人永久免费观看| 亚洲欧美中文日韩视频| 曰韩亚洲av人人夜夜澡人人爽| 久久精品无码专区免费东京热 | 中文字幕在线视频免费观看| 亚洲福利在线观看| 免费激情视频网站| a级毛片高清免费视频就| 亚洲欧洲视频在线观看| 免费人成网站在线播放| 久久综合给合久久国产免费| 亚洲国产AV一区二区三区四区| 亚洲中文字幕在线第六区| 成年女人18级毛片毛片免费观看| 好猛好深好爽好硬免费视频|