论坛首页 Java企业应用论坛

IoVC,一种新的编程思想

浏览 62295 次
精华帖 (0) :: 良好帖 (6) :: 新手帖 (17) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-03-25  

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}" tooltip="#{myBean.tooltip}"/>
后台:
public class MyBean {
    private String value;
    private String tooltip;
    public String getValue() {
        return value;
    }
    public void setValue(String value) {
        this.value = value;
    }    public String getTooltip() {
        return tooltip;
    }
    public void setTooltip(String tooltip) {
        this.tooltip = tooltip;
    }
}

 

我们可以观察:在传统的编程模型下,如果页面逻辑发生变化,我们首先需要修改UI展现层,加上 tooltip="#{myBean.tooltip}" 的语句,然后,再在后台Bean中设置此属性值。

那么,在IoVC编程模型下,情况又是怎样的呢?

 

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

 

如果需要扩展文本编辑框的tooltip属性,只需要:

 

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

        @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),程序员可以拿过来直接用,并且, 如果要对页面做调整(只要不是页面元素的增加或删除),程序员可以在自己熟悉的代码中直接设置,这岂非是一种很享受的境界?

 

更多技术文章,请见:http://www.operamasks.org/

 

   发表时间:2008-03-26  
这也算新思想?
0 请登录后投票
   发表时间:2008-03-26  
还真是反转。。。。等于在定义领域类时也定义它的表现方式。但是应用场景似乎很狭窄,希望楼主继续发展,并在实际项目中应用。
0 请登录后投票
   发表时间:2008-03-26  
你是在造一个更强大的formbean吗?
0 请登录后投票
   发表时间:2008-03-26  
用法太有点抽象了.
如果像这样子
还不如用Tapestry
0 请登录后投票
   发表时间:2008-03-26  
引用
页面美工只需要给每个组件设置一个ID,程序员在后台的业务逻辑中,便拥有对页面 UI 元素的完全控制力。
程序员可以拿过来直接用,并且, 如果要对页面做调整(只要不是页面元素的增加或删除),程序员可以在自己熟悉的代码中直接设置,这岂非是一种很享受的境界?


其实wicket之类的框架早就是这样了,而且页面还是纯html的,更利于和美工合作——既然金蝶的OperaMasks都把JSF改成这个样子了,为什么不再彻底一点,像Wicket、Tapestry直接用html而不是jsp的taglib呢?

OperaMasks做到现在这个样子还是很值得肯定的。

至于IoVC,我看还算不上什么编程思想,更不是什么新东西。
0 请登录后投票
   发表时间:2008-03-26  
apusiczhang 写道
其实 写成那样, 还不如直接使用JSF的组件binding, 这样可以在mbean中直接操作该组件的任何信息. 不需要其他扩展了.
0 请登录后投票
   发表时间:2008-03-26  
upheart 写道
引用
页面美工只需要给每个组件设置一个ID,程序员在后台的业务逻辑中,便拥有对页面 UI 元素的完全控制力。
程序员可以拿过来直接用,并且, 如果要对页面做调整(只要不是页面元素的增加或删除),程序员可以在自己熟悉的代码中直接设置,这岂非是一种很享受的境界?


其实wicket之类的框架早就是这样了,而且页面还是纯html的,更利于和美工合作——既然金蝶的OperaMasks都把JSF改成这个样子了,为什么不再彻底一点,像Wicket、Tapestry直接用html而不是jsp的taglib呢?

OperaMasks做到现在这个样子还是很值得肯定的。

至于IoVC,我看还算不上什么编程思想,更不是什么新东西。


没错,我也是这种感觉。看看现在Warp-MVC就知道,IoVC早已经不是新鲜玩意,当然到这个词造的还不错。老实说还不如扔掉JSF这个包袱、大胆的走模板语言、Annotation的路。
0 请登录后投票
   发表时间:2008-03-26  
引用
这也算新思想?

虚心受教
0 请登录后投票
   发表时间:2008-03-26  
感觉有点像WEB-work或者struts2,直接是页面从Action里边拉数据
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics