| « | September 2026 | » | | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | | | |
| 公告 |
| 暂无公告... |
| Blog信息 |
|
blog名称: 日志总数:83 评论数量:123 留言数量:0 访问次数:272469 建立时间:2006年8月17日 |

| |
|
[软件设计]IoVC,一种新的编程思想 文章收藏, 软件技术
lylhelin 发表于 2008/2/29 11:32:30 |
| 2008-02-26 来自:villa123
IoVC,一种新的编程思想Kevin--------------------------------------------------------------------------------1. 概述2. 什么是IoVC1. 概述长
久以来,在Web编程中,一直很难克服的一个问题就是:展现层与业务数据纠缠在一起,无法进行良好的解耦,
从而造成应用系统的扩展性差,维护成本高。于是,出现了所谓的MVC框架,试图以 Model-View-Control
这种非常流行的设计模式,将两者有效的隔离开来。但回顾目前主流的 Web MVC 架构,它们所做的绝大部分工作无非是:将页面中控件的值取出打包成
Java Bean;再无非就是在帮助你完成页面导航的过程中,辅助你进行页面参数的传递与分析。这样一种“简单
MVC”架构,是无法完全解决“展现层与业务数据完全解耦”这个问题的。
一旦你的需求超越了框架的能力,那么,你将面对的依然是:不得不在展现层中嵌入大量的 Script
代码,可能是Java代码片断,也可能是大量tag-lib及EL表达式的引入。在Apusic OperaMasks 2.0中,提出了一种新的编程思想:IoVC,它能够有效解决上面提及的问题。2. 什么是IoVCIoVC——“Inversion
of View-Control”,即“视图控制反转”,换言之:它能够把对“View(即 UI
视图)的控制力”注入到你的后台业务逻辑中。这样一来,你在编写业务逻辑的过程中,对 View
拥有足够的控制力,从而能够将展现层与业务逻辑完全的解耦。举一个场景:页面中有一个文本输入框,它的值对应后台的一个JavaBean的属性。我们首先来看一下传统的编程模型:页面:后
台:public class MyBean { private String value; public String getValue()
{ return value; } public void setValue(String value) { this.value =
value; }}此时,假设用户需要发生变化,我们需要设置文本输入框的tooltip,并且,它的值来自于后台 JavaBean 的另一个属性,那么,程序需要做如下调整:页面:后
台: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编程模型下,情况又是怎样的呢?页面:后台:public class MyBean { @Bind(id="txt") private String value; }如果需要扩展文本编辑框的tooltip属性,只需要:页面:后
台: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),程序员可以拿过来直接用,并且, 如果要对页面做调整(只要不是页面元素的增加或删除),程序员可以在自己熟悉的代码中直接设置,这岂非是一种很享受的境界?注:IoVC,Apusic OperaMasks 2.0新特性。 |
|
|