<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
    主站蜘蛛池模板: 91亚洲国产成人久久精品网站| 理论亚洲区美一区二区三区| 亚洲 小说区 图片区 都市| 亚洲av激情无码专区在线播放 | 久久99国产综合精品免费| 免费一级毛片清高播放| 国内精品久久久久影院亚洲| 四虎影库久免费视频| 中文字幕成人免费高清在线视频 | 理论秋霞在线看免费| 无码乱人伦一区二区亚洲 | 中文字幕亚洲综合精品一区| 免费观看大片毛片| 18禁超污无遮挡无码免费网站| 国产成人精品亚洲日本在线| 亚洲毛片av日韩av无码| AV无码免费永久在线观看| 一边摸一边桶一边脱免费视频| 亚洲成人网在线播放| 亚洲精品黄色视频在线观看免费资源| 91禁漫免费进入| 一级毛片免费全部播放| 亚洲AV无码精品蜜桃| 亚洲人成亚洲人成在线观看 | 成年人视频在线观看免费| 中文在线免费观看| 亚洲av日韩av永久在线观看| 亚洲精选在线观看| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 最新猫咪www免费人成| 中国一级全黄的免费观看| 亚洲国产成人AV在线播放| 亚洲精品国产成人99久久| 亚洲精品视频在线看| 国产福利在线免费| 中文字幕一区二区免费| 老司机午夜性生免费福利| 亚洲一区在线观看视频| 亚洲欧洲国产精品你懂的| 亚洲欧洲日产国码av系列天堂| 国产免费观看a大片的网站|