`
apusiczhang
  • 浏览: 17394 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

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}" 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/

 

分享到:
评论
168 楼 free_chilly 2008-12-19  
hax 写道
apusiczhang 写道

To Robbin兄:
    1) 模版语言:OperaMasks 已经在路上,那就是 Facelets。
    2) Annotation:在 OperaMasks 2.0中,已经大量运用了 Annotation。Robbin兄人在上海,套用上海的一句方言是:“Annotation不要太多哦。”
    3) JSF:我们站在JSF规范之上,取之精华,弃其糟泊。我们克服了许多JSF规范中不尽人意的地方,如对状态的维护,但同时,吸取了JSF大量的精华所在,如:组件模型、生命周期等等。但至于是否完全彻底的抛弃JSF,坦白说,我们也正在思考。



虽是跟robbin同志说的,我也来凑个热闹。

关于annotation。

我觉得annotation是个好东西是无疑的,但是我们当然也知道它所带来的耦合。为什么anno那么红,我个人觉得是原先许多解耦是无必要的,比如ORM,在多数时候把ORM规则写到单独的xml里并没有提供什么好处,因为它本来就是依赖你的Object model的,反而造成维护不便。

但是UI就大大不同。UI和app logic(更不要说domain logic)的耦合永远是麻烦的根源。

实际上,我们的问题是UI自身的logic怎么办。因为UI要越来越复杂。过去我们被迫写在jsp/taglib里,这导致一个极大的问题,就是ui logic和app logic交织到一块儿了。诚然这两者之间的界限并不是清晰的,就如同app logic和domain logic一样,有时候边界是模糊的。但是确实是存在区分。否则就不会有UI组件一说。UI组件无非是要把UI逻辑给包起来,别泄漏到app logic里。

我认为真正你要解决的问题是如何UI归UI,app归app。所以出现问题不是你对UI控制力太弱,而是你对UI控制太多。这看似矛盾,实则是深层问题的必然结果。因为UI自己搞不定,只好你想点法子越俎代庖。

关于JSF,偶只有一点题外话,取精去粗,这固然好,但是如果你们不能影响JSF的规范的发展方向,那还是白搭。总得来说,我对JSF的印象就是:它是一个续命的技术,而不是一个创新的技术。


受教,精辟。
167 楼 free_chilly 2008-12-19  
lonlyleo 写道
这种标签不太喜欢,我喜欢jodd-form这种的,套一个tag就行了.

我现在越来越倾向用比较老而原始的东西,比如页面就是HTML+js,再加上一些jsp必须的东西,觉得对这些东西的包装越少越好;
想给一个input增加一个属性操作dom不也是易如反掌么?后台么,反正增加一个属性也是要作修改的.

我已经患上了框架/思想恐惧症.要说这IoVC是一种解决某种问题的实现方案可能还好一点.大词时代还没过去么?


我不是恐惧,我是发现越是倾向于比较老和原始的东西,反而在人员协同工作和开发效率上更高。
ibm宣称的理念很多,但在我的接触中,他们对于新技术的使用及其谨慎,国内的绝大部分企业客户应用,
都恰恰采用楼上的思路,简单而原始+少量的新技术框架。
166 楼 fyjava 2008-04-06  
<div class='quote_title'> 写道</div><div class='quote_div'>叫hax的好像只有我一个。不过爱民的书好像还没有上市。</div> <p><span style=''> </span></p><p><span style=''>这是谁呀?难道换了个马甲咱就不认识了?

看你这叫得累的,歇歇吧。讲3个故事让大家都轻松下:

</span></p><p><span style=''> </span></p><p><span style=''>【故事一】</span></p><p><span style=''> </span></p><p><span style=''>

   秦汉时代,我国西南地区居住着许多部落。汉初,由于朝廷忙着平定内乱和对付北方匈奴的侵犯,没有余力顾及到遥远的西南地区,而西南的这些部落也从不知道外面的世界。</span></p><p><span style=''>

  西南地区的这些部落都很小,他们散住在山中、林问。其中有一支名为“夜郎”的部落,就算是很大的了。   </span></p><p><span style=''>

  夜朗部落有个首领名叫多同。在他眼里,夜郎就是天底下最大的国家了。一天,他骑马带着随从出外巡游,他们来到一片平坦的土地上,多同扬鞭指着前方说:“你们看!这一望无边的疆土,都是我的,有哪一国能比它大呢?”</span></p><p><span style=''>

  跟随一旁的仆从连忙献媚说:“大王您说的很对,天下还有哪一国比夜郎更大呢!”多同心里沾沾自喜。</span></p><p><span style=''>

  他们又来到一大片高山前,多同仰起头,看着巍峨的高山说:“天下还找得到比这更高的山吗?”

</span></p><p><span style=''>  随从连忙应和说:“当然找不到,天下哪有比夜郎的山更高的山呢!”</span></p><p><span style=''>

  后来,他们来到一条江边,多同跳下马来,指着滔滔江水说:“你们看,这条江又宽又长,这是世界上最长最大的河了。”

</span></p><p><span style=''>  随从们没有一个不同意的,都齐声说:“那是肯定的。我们夜郎是天下最大的国家。”

</span></p><p><span style=''>  这次出游以后,夜郎国的人更加自大起来。

</span></p><p><span style=''>  汉武帝时候,武帝派使者出使印度,经过夜郎国。</span></p><p><span style=''>

  夜郎的首领多同从没去过中原,根本不知道中原是怎么回事。于是他派人将汉朝使者请进部落帐中。多同问汉朝使者说:“汉和夜郎相比,哪个大些?”

</span></p><p><span style=''>  汉使者听了多同的问话,不禁哈哈大笑起来,他回答说:“夜郎和汉是完全不能相比的。汉朝的州郡就有好几十个,而夜郎的全部地盘还抵不上汉朝一个郡的地盘。你看,哪一个大呢?”</span></p><p><span style=''>

  多同一听,不禁目瞪口呆,满脸羞愧。</span></p><p><span style=''>

  生活中也是这样,见识越广的人越懂得谦虚,而见识愈短浅的人反而愈盲目自大。</span></p><p><span style=''> </span></p><p><span style=''>【故事二】</span></p><p><span style=''> </span></p><p><span style=''>

  

从前,有一只青蛙住在一口井里。一天,他遇见一只东海来的海龟。他立刻对这只海龟说:“你看,我住的地方多好。如果我高兴,我就跳上去看看天。我要是累了,就找个洞休息。你瞧瞧这些可怜的螃蟹、蝌蚪,他们怎能跟我比?我才是这的主人,我的家是世界上最好最舒服的地方。如果你愿意,你可以到我这来参观。” 青蛙的话打动了这只海龟。他就向青蛙的家爬去。可刚刚开始爬,就绊了一跤。他向青蛙抱怨道:“这地方这么小有什么好,你到我的家东海去看看,你就会知道什么是好地方。那里可大呢!” 可是青蛙从没见过海,根本想象不出海有多大。 后来,人们就用“坐井观天”来比喻一个人的思想狭隘。</span></p><p><span style=''> </span></p><p><span style=''>

  

</span><span style=''>

Long long ago, a frog lived in a well. One day, he met a turtle who came from the Eastern Sea. He boasted to the turtle: "Look, how nice my well is! If I'm in high spirits, I 'll jump on the rim of the well and see the sky. If I 'm tired, I 'll find a hole for a rest. Look at these poor crabs and tadpoles, How can they compare with me? I 'm the master here and my home is the best place in the world. Would you like to have a visit?" The turtle was fascinated by his sweet words. Then the turtle crept to the well. As soon as the turtle began to move, he stumbled over the railing. Then he complained to the frog:" What a narrow place! If you see the vast Easton Sea where I live, you'll know how happy life there can be." The frog could not imagine how vast the sea is, as he has never seen it. Later, people use it to describe the ones who have a very narrow view.

</span></p><p><span style=''> </span></p><p><span style=''>【故事三】

</span></p><p><span style=''> </span></p><p><span style=''>  赵奢是赵国名将,为赵国屡建战功。可是赵奢的儿子赵括却不像父亲。赵括从小的确读了不少兵书,谈起用兵之道那简直是滔滔不绝,连他父亲都不如他。于是,赵括自以为是,觉得自己是了不起的军事家,他狂妄地认为自己在军事上已经是天下无敌了。然而赵奢却不这么认为,他不但从未赞扬过儿子的夸夸其谈,反而却常常担忧地说:“日后赵国不让赵括带兵便罢,如果让他带兵打仗,那么断送赵国前程的将必是赵括无疑。”

</span></p><p><span style=''>  过了几年,赵奢死去了。</span></p><p><span style=''>

  这一年,秦国对赵国大举进攻,赵国派了年龄很大的将军廉颇率军迎敌。开始,赵军连连失利。在这样的情况下,廉颇改变战略方针,他下令让军队坚守城池,以逸待劳,不要主动出击,保存实力把住阵地从而拖垮秦军。结果真的,秦军由于远道而来,经不住廉颇的拖延,粮草渐渐接不上,快要支撑不下去了,秦军十分恐慌。于是秦军也施展汁谋,派人悄悄潜入赵国散布流言说:“秦军谁都不怕,就怕赵括担任大将。”

</span></p><p><span style=''>  赵王正在为廉颇在军事上毫无进展而闷闷不乐,听到外面流传的那些说法,便撤掉廉颇,要派赵括为大将来统帅军队。赵括的母亲记住丈夫生前的嘱咐,再三向赵王说明情况,极力劝告赵王收回决定,可是赵王哪里听得进去,他真的任命了赵括担任大将来取代廉颇。</span></p><p><span style=''>

  赵括一到前线,便开始胡乱指挥起来。他完全改变了廉颇的策略,大量撤换将官,一时间弄得人心惶惶军心涣散。</span></p><p><span style=''>

  秦军得知赵军这些情况,自然正中下怀。一天深夜,秦军派一支队伍偷袭赵营,刚一交战,便佯装败走。同时,秦军又派兵乘机切断了赵军的粮道。</span><br/><span style=''>

  </span><span style=''>赵括不知实情,还以为秦军真的是败逃。他得意地想,取胜即在眼前,这正是表现自己的时候。于是他命令部队紧紧追击。结果,赵军追了一段后即被秦军伏兵将追兵拦腰截断,使赵军首尾不能相顾。然后,秦军一齐杀出,将赵军各个击破,团团围住。</span></p><p><span style=''>

  赵军被秦军围困40多天,粮食早已吃光又没有接应,一时间军心大乱。赵括一筹莫展,满肚子的兵法也不知如何施展。眼看守下去也是活活饿死,便率军仓皇突围。可是怎敌秦军四面掩杀,哪里突得出去。结果赵括被乱箭射死,40万赵军也全军覆没。从此以后赵国就一蹶不振。</span></p><p><span style=''>

  赵括纸上谈兵并无真才实学,而赵王还对他委以重任,结果招致惨痛失败。看来,教条主义的危害是不可轻视的。</span></p>
165 楼 aah_aah 2008-04-05  
hax 写道
关于elite,我只是说它的介绍自相矛盾。我并没有说elite本身好或不好,语言这个领域我不是专家,如果要有人来评判,或许ajoo可以。


如你所说,你根本就不懂,就捡着人家一句两句话,便极尽挖苦嘲讽之能事,这样的“评判”有何意义?



164 楼 hax 2008-04-04  
关于elite,我只是说它的介绍自相矛盾。我并没有说elite本身好或不好,语言这个领域我不是专家,如果要有人来评判,或许ajoo可以。
163 楼 hax 2008-04-04  
aah_aah 写道
hax,你知道人家说的elite是干什么用的吗?在aom中,你甚至可以完全抛开Java用elite做一个程序。
按照人家的说法,你可以在后台用elite(当然也可以集成java)调用业务逻辑,也可以通过IoVC影响UI,这怎么又自相矛盾了呢?
要想批评人家,就不妨把人家做的东西全盘理解透彻了以后再说,否则,一叶障目,不见泰山,一知半解的情况下就大肆嘲讽,说什么“糟蹋JSF”诸如此类的言语,你不觉得惭愧吗?

我承认,我是和AOM有点关系,我是他们的用户,他们曾经给我们公司进行过AOM的培训。
思想不思想的我不想谈,至少我认为,AOM给我带来了开发效率的提升,仅评这一点,至少我很满足。

扯吧扯吧,跟一个满口'丫丫'的人,有什么道理可讲?



有些人总以为别人什么都不知道。你看懂我批评什么了吗?

还有,你看不出自相矛盾在哪里?那好,你再好好看看吧。很简单的。就那么几行字而已。

还有恭喜AOM有你这样好糊弄的客户。

还有,我看别人说话,是看他说的有没有道理,而不会管他说了几个脏字,何况“丫”字还够不上脏字,只不过是一种修辞手法而已。
162 楼 aah_aah 2008-04-04  
同时,对aom的人也想说两句:
1)质量要迅速稳定,我们已经不需要什么新特性了。
2)案例和文档要丰富,别总是那几个简单的例子,以让别人说闲话。

祝aom一路走好!
161 楼 aah_aah 2008-04-04  
hax 写道

不看不知道,一看吓一跳。AOM专做反其道行之的事情。

我现在很同情JSF了,被AOM这样糟尽。。。

BTW我摘录的是第一段和最后一段。大家可以发现其中的自相矛盾之处吗?


“OperaMasks已经在JSR-252的基础上对表达式语言做了大量的扩充,已经成为一种全新的表达式语言,我们将其命名为ELite,意为其源于EL表达式,同时又有轻量(Lite)的含义。

在OperaMasks的IoVC框架之下,EL已经很少出现在视图中,而在业务层将更多地使用EL来简化业务模型的开发,例如注入依赖对象、发送模型事件等。因此,JSR-252所定义的表达式语言已经不能满足要求,我们必须设计一种功能更强大的表达式语言来灵活地访问和操纵业务模型对象。
……
到现在为止,您还认为ELite是一种简单的表达式语言吗? ELite现在已经演化成为一个功能强大的动态语言,它脱胎于LISP这门古老而伟大的语言,同时又具有与Java相近的语法形式,可以容易地调用Java所写的程序代码,以及提供了方便灵活的集合操作函数,使其成为编写展现层逻辑的一种奇妙的选择。”

看到Elite,我想到了JS。因为Elite又是一种胶合语言,起的作用和JS如出一辙。只不过Elite在服务器端,而JS在浏览器端。

早晚(就2、3年最多了)会发展出强大的B端组件模型(ext就是明证),而加上DWR/Sajax这样的模式之后,抛开皮相的差别,编程模式最终还是归于一统。

唯一差别是多少在Browser,多少在Server而已。AOM说我能把Server端的逻辑靠ajax搬点到Browser上,但是大家自己直接用DWR不行吗?唯一的优势或许是Elite语言比JS好一点?不过这点优势实在是太不堪一击了。

如果有人要扯IDE支持、JSF组件模型优势……那就扯吧,反正扯扯无伤大雅。



hax,你知道人家说的elite是干什么用的吗?在aom中,你甚至可以完全抛开Java用elite做一个程序。
按照人家的说法,你可以在后台用elite(当然也可以集成java)调用业务逻辑,也可以通过IoVC影响UI,这怎么又自相矛盾了呢?
要想批评人家,就不妨把人家做的东西全盘理解透彻了以后再说,否则,一叶障目,不见泰山,一知半解的情况下就大肆嘲讽,说什么“糟蹋JSF”诸如此类的言语,你不觉得惭愧吗?

我承认,我是和AOM有点关系,我是他们的用户,他们曾经给我们公司进行过AOM的培训。
思想不思想的我不想谈,至少我认为,AOM给我带来了开发效率的提升,仅评这一点,至少我很满足。

扯吧扯吧,跟一个满口'丫丫'的人,有什么道理可讲?

160 楼 hax 2008-04-03  
叫hax的好像只有我一个。不过爱民的书好像还没有上市。
159 楼 dboylx 2008-04-03  
您是周爱民在Javascript书里提到过的HAX?
158 楼 hax 2008-04-03  
这里我再说一下@BeforeRender作为例子。一直有人咬定我不懂JSF,我一直没发声音。既然正主回来了,我就说说。

其实我一直强调的是你带给开发者怎样一种开发模式。譬如ROR他给开发者就有很清晰的套路。而@BeforeRender就是一个看不出套路的东西。只是因为JSF有Render阶段,你就把它暴露给一般开发者,这是没有道理的。按照我对JSF的粗浅理解,只有组件开发者才可能会需要像BeforeRender这样的功能。我认为按照JSF的理念,一般开发者是没有必要去接触Render阶段的。特别是你在managedbean上更没有什么理由一定要在render之前干什么事情。如果你引入这样一个@BeforeRender,实际上引诱了一般开发者不恰当的乱用。比如像IoVC例子里那样,用@BeforeRender进行字段初始化,我认为就实在是太拙劣了。
157 楼 hax 2008-04-03  
嗯。我希望AOM能真正做出好东西来。

之前有人质问我,你咋不做个框架出来呢?其实这不是说我要做一个框架就能做出来。真正要做到一个有商业目标的完整的产品,靠个人是不可能的,一定要有资源,而在国内这样的资源更是稀缺。金蝶现在有资源,所以更希望金蝶不要把精力浪费在华而不实的东西上。

还有,我讲的那些思路也没有什么了不起,都是我从其他设计和框架中学来的。譬如在view中分离model和ui controls,就是从XForms中学来的。既然没有什么真正创见,我认为我自己就没有必要去花力气做。相反,我在某些领域,譬如JS、CSS等还算有点独创性,所以我会做这些方面的工作。

AOM的问题我认为有两个,第一是JSF思路的牵制,我们看到AOM也看到了JSF的一些问题,希望能做一些突破,譬如IoVC,然而恰恰是IoVC的设计过于草率(至少就我看到的描述)使得其似乎还不如JSF原本中规中矩的设计合理。第二就是自己整个开发理念和模式尚未似乎有统一认识,常出现自相矛盾的地方。比如Elite的介绍文字。
156 楼 xyz20003 2008-04-03  
在国内搞技术研发什么的,一定要脸皮厚,不要怕被骂,有骂声才有发展,能容忍才有进步。

更何况hax完全是好意,帖子里都是讨论技术的成分,又不是无理取闹。

俗话讲,兼听则明,希望aom一路走好。
155 楼 apusiczhang 2008-04-03  
这几天一直在外面出差,不能及时上网。看到这篇文章受到大家如此的关注,欣慰之余又颇有几份惶恐。
简单谈一下我的个人看法:

技术上:软件技术原本就没有绝对的优秀与粗劣,尤其在谈这种理念、模式之类的东西。IoVC只是我们的一种思考与探索,各位的一些意见我们会积极吸收。但同时需要指出的是:把IoVC等同于几个@Bind的标注,再或者id的指定等等,确实是有些片面。至于“心虚”与否,呵呵,我们向来是很“虚心”的听取各位的意见。虚心,但绝非心虚,呵呵,没偷没抢的,为什么要心虚呢?

情感上:这里也不想去扯什么民族软件的大旗,我们只是在做我们自己的一份事情而已。感谢各位对OperaMasks的厚爱,各位的鼓励会成为我们不断前进的动力,而各位的批评,无论是善意的还是非善意的,我们该听取的一定会听取,该一笑而过也会一笑而过。

行动上:说不如做,且让我们静下心来,把程序写好,把产品做好,这才是我们的本份。

再次感谢大家的关注!
154 楼 dboylx 2008-04-03  
上星期刚参加北京的英雄大会,金碟的技术总监唯一的一场演讲就是这个项目,可以看出金碟高层对些项目的重视。

前两天从CVS上下载了项目源码,JSF组件设计相当的精巧与老练。实现相当漂亮,佩服一个~~赞一个先。

看了很多HAX大师与英雄们的讨论,想听听袁老大对此是什么看法,设计者什么想法。
153 楼 hax 2008-04-03  
黄皮肤黑眼珠又怎么样了?日本人朝鲜人越南人都是黄皮肤黑眼睛。

我最烦扯什么民族大旗了。

我做不做框架跟我能不能批评AOM有什么关系?
152 楼 asheng88 2008-04-03  
令狐不冲 写道
兄弟客气,&ldquo;根正苗红&rdquo;实不敢当。金蝶白手起家,靠技术靠拼命。老徐老蔡,三四十岁已头发花白。争得就是一丝基础软件血脉。
中国人做点东西不容易,叫的响了一点,吼的急了一点也是希望有人关注。众人拾柴火焰高,以一家之力做好一个社区显然不实际。
各位低手高手高高手,恳请多些理解,少些嘲讽;多些宽容,少些争斗;多些建议,少些叫板。再怎么说,咱还都是黄皮肤黑眼珠。

说得好,hax貌似高人,放个框架到社区来让大伙瞧瞧?
151 楼 xxjhappy 2008-04-03  
---重复提交,编辑掉---
150 楼 xxjhappy 2008-04-03  
hax 写道

还有,IoVC既然是新的不成熟的东西,那就表急吼吼的自称什么新思想,比MVC更好的MVC……

金蝶本来根红苗正,不是我看不惯他,实在是他自己太浮躁。丫如果真腰板(技术)够硬,十个我也拿他没辙不是么。


我有时看着hax兄的逻辑就真的不知是哭好还是笑好。这个回贴不谈技术,只谈逻辑。一说技术最后又给扯到什么非技术因素上,闷。。。

IoVC既然是新的不成熟的东西,那就表急吼吼的自称什么新思想。 —— 思想和实现是有区别的好不好。就象hax兄的理想框架一样,思想新颖,考虑周全,而且如果做的话,功能将会非常强大。但是你一天不做,思想再高也没用,等到你哪天做出来了,我们再来探讨完善不完善,成熟不成熟的问题。但有一点我是挺肯定的,如果有一天hax兄真的挺身而出,组建一支团队,雄心勃勃地把理想中的框架实现出来之后,他会悄悄的在javaeye上脚踏实地的发个不起眼的小贴,说“小弟不才,做了个小小的程序,可以适度增强大家对MVC框架的理解,请大家赏脸帮忙试用。下载地址 www.334455.com,人格保证,绝无病毒,请放心使用。”

金蝶本来根红苗正,不是我看不惯他,实在是他自己太浮躁,(于是我看不惯他)。—— 一句话里面直接就前后矛盾了。

丫如果真腰板(技术)够硬,十个我也拿他没辙不是么。 —— 你现在拿人家有撤么?什么叫“丫如果。。。”
149 楼 令狐不冲 2008-04-03  
<div class='quote_title'>hax 写道</div><div class='quote_div'><div class='quote_title'>anakin1978 写道</div><div class='quote_div'>不管它是好猫还是坏猫,IoVC既然是新东西,就必然会有不完善的地方,比如前面讨论中提到的两个UIControl不能使用同一个id来绑定这个问题,也许目前不能绑定吧(俺还没试过,也不知道真伪,现在忙的很),但AOM团队就把它做成能用一个id来绑定又怎么了?这个设计不难吧?下面俺来越俎代庖一下,UIControlI是个接口,现在提供两个实现,一种是常规的,叫UIControlSimple,把它看成原来一个id只能绑一个时的实现,一个是新添加的,叫UIControlComposite,它持有一个view中所有该id对应的UIControlSimple实例,接下来,对UIControlComposite的所有操作,都被适配到真正的UIControlSimple上去了,这样ok吧?当然,这里还有问题,我希望我在其中一个ui上动作不会导致两个ui响应,这里还要做些特殊处理,可以偷偷摸摸的给具有相同id的ui渲染一个特殊标识出来,这样,就可以找到对应的UIControlI实例了。这个思路是否有问题,还请各位点评,俺要偷懒了,玩游戏去。。。</div><br/><br/><br/>id是唯一标识符好不好。你至少要懂得换个属性成不成。 <br/>所以,你就别给AOM添乱了,人多厉害啊,你想到的他们能想不到么? <br/><br/>还有,IoVC既然是新的不成熟的东西,那就表急吼吼的自称什么新思想,比MVC更好的MVC…… <br/><br/>金蝶本来根红苗正,不是我看不惯他,实在是他自己太浮躁。丫如果真腰板(技术)够硬,十个我也拿他没辙不是么。</div><p> </p><p>兄弟客气,“根正苗红”实不敢当。金蝶白手起家,靠技术靠拼命。老徐老蔡,三四十岁已头发花白。争得就是一丝基础软件血脉。 </p><p> </p><p>中国人做点东西不容易,叫的响了一点,吼的急了一点也是希望有人关注。众人拾柴火焰高,以一家之力做好一个社区显然不实际。</p><p> </p><p>各位低手高手高高手,恳请多些理解,少些嘲讽;多些宽容,少些争斗;多些建议,少些叫板。再怎么说,咱还都是黄皮肤黑眼珠。</p><p> </p>

相关推荐

    AOM介绍-Web开发敏捷之道.

    OM提供了一种简化的编程模型,通过使用如`w:textField`、`w:button`、`w:dataGrid`等组件标签,以及`@Bind`、`@ValidateLength`、`@DataModel`、`@Action`等注解,开发者可以轻松地实现数据绑定、校验、动作处理等...

    OperaMasks快速进阶

    OperaMasks是一个开箱即用的Web开发解决方案,它的关键特性包括IoVC的编程思想,使得页面设计与控制逻辑分离。此外,它还内置了Ajax支持和丰富的UI组件库,适合开发高交互性Web应用和轻量级、高并发的Web站点。...

    FlappyBird 小游戏所使用的图片和音效资源

    仅供学习使用

    时间序列分析中非线性和多维度格兰杰因果检验的应用与实现

    内容概要:本文深入探讨了多种高级格兰杰因果检验方法,包括非线性格兰杰因果检验、分位数格兰杰因果检验、混频格兰杰因果检验以及频域因果检验。每种方法都有其独特之处,适用于不同类型的时间序列数据。非线性格兰杰因果检验分为非参数方法、双变量和多元检验,能够在不假设数据分布的情况下处理复杂的关系。分位数格兰杰因果检验则关注不同分位数下的因果关系,尤其适合经济数据的研究。混频格兰杰因果检验解决了不同频率数据之间的因果关系分析问题,而频域因果检验则专注于不同频率成分下的因果关系。文中还提供了具体的Python和R代码示例,帮助读者理解和应用这些方法。 适合人群:从事时间序列分析、经济学、金融学等领域研究的专业人士,尤其是对非线性因果关系感兴趣的学者和技术人员。 使用场景及目标:①研究复杂非线性时间序列数据中的因果关系;②分析不同分位数下的经济变量因果关系;③处理不同频率数据的因果关系;④识别特定频率成分下的因果关系。通过这些方法,研究人员可以获得更全面、细致的因果关系洞察。 阅读建议:由于涉及较多数学公式和编程代码,建议读者具备一定的统计学和编程基础,特别是对时间序列分析有一定了解。同时,建议结合具体案例进行实践操作,以便更好地掌握这些方法的实际应用。

    直流电机双闭环控制系统的Python与Matlab仿真及参数调优

    内容概要:本文详细介绍了直流电机双闭环控制系统的原理及其仿真实现。首先构建了一个DC电机的动力学模型,定义了电枢电阻、电感、转矩常数等参数,并通过Python实现了电机的更新机制。接着引入了双环控制器,外环控制转速,内环控制电流,利用PID控制器进行调节。文中强调了电流环和转速环之间的协调关系,以及调参过程中的一些实用技巧,如先调整内环再调整外环,比例先行积分缓。同时提供了MATLAB/Simulink环境下的具体实现步骤,包括设置合理的采样时间和加入必要的滤波器,确保系统的稳定性。此外,还分享了一些常见的错误案例和解决办法,帮助读者更好地理解和应用这一技术。 适合人群:具有一定自动化控制基础,尤其是对电机控制感兴趣的工程技术人员。 使用场景及目标:适用于需要精确控制电机转速和电流的应用场合,如工业机器人、电动汽车等领域。目标是使读者能够掌握双闭环控制的基本原理,并能够在实际项目中灵活运用。 其他说明:文中不仅提供了详细的代码示例,还有丰富的图表辅助解释,便于读者直观理解各个部分的工作原理。对于初学者来说,建议从简单的单环控制入手,逐步过渡到复杂的双环控制。

    微信默认视频来电铃声 phonering.mp3

    微信默认视频来电铃声 phonering.mp3

    自然语言处理隐私数据集公开收集

    自然语言处理隐私数据集公开收集

    DzzOffice V2.3.3新版本测试包

    咱们期待已久的V2.3.3测试包来啦!大家可以下载体验,帮忙一起测试测试,有啥问题尽管提,咱们一起把它打磨得更完美~

    Photo_250404014522.jpeg

    Photo_250404014522.jpeg

    单相PWM整流电路的Matlab双闭环控制仿真:220V交流转250V直流

    内容概要:本文详细介绍了如何使用Matlab 2013进行单相PWM整流电路的双闭环控制仿真,旨在将输入的220V交流电转换为稳定的250V直流电。文章首先解释了单相PWM整流电路的工作原理及其重要性,接着阐述了双闭环控制策略的具体实现方法,包括电压外环和电流内环的设计。随后,文章详细描述了在Matlab Simulink环境中的建模步骤,涵盖了主电路搭建、双闭环控制模块构建以及PWM信号生成的关键环节。最后,通过仿真结果展示了输入电流与输入电压的同步性和输出直流电压的稳定性,并提供了针对常见问题的解决方案。 适合人群:从事电力电子领域的研究人员和技术人员,尤其是对PWM整流电路和Matlab仿真实验感兴趣的读者。 使用场景及目标:适用于高校实验室、科研机构和企业研发中心,帮助相关人员理解和掌握单相PWM整流电路的工作机制及其控制策略,提升电力电子设备的研发效率和性能。 其他说明:文中提供的代码片段和参数设置有助于读者快速上手并进行实验验证,同时也强调了实际应用中需要注意的问题,如滤波电容的选择、PI调节器参数的调整等。

    云计算与边缘计算协同下的线形搜索算法及多线程并行技术实现

    内容概要:本文探讨了云计算和边缘计算的协同系统模型,特别是在该模型下使用线形搜索算法寻找最优路径以及通过多线程并行技术提升系统性能的方法。文中详细介绍了线形搜索算法的Matlab实现及其应用场景,如智能工厂的数据传输路径优化。此外,还讨论了如何在边缘设备上应用多线程并行技术,以充分利用CPU多核能力,提高处理效率。文章强调了在实际部署中需要注意的硬件限制和网络动态变化等问题,并提出了相应的解决策略。 适合人群:对云计算、边缘计算及并行计算感兴趣的开发者和技术研究人员。 使用场景及目标:适用于需要优化云边协同系统中数据传输路径和提升系统性能的实际项目。具体目标包括减少数据传输延迟、提高实时性和处理效率。 其他说明:文章提供了具体的Matlab代码示例,帮助读者更好地理解和实现相关算法。同时提醒读者注意硬件资源的限制,在实际应用中进行适当的调整和优化。

    CATIA DMU中麦弗逊悬架与齿轮齿条转向系统的非参数化运动仿真及应用

    内容概要:本文详细介绍了如何在CATIA DMU模块中进行麦弗逊式独立悬架与齿轮齿条转向器的非参数化运动仿真。首先,文章解释了底盘结构及其运动特性,接着逐步展示了如何设置悬架和转向系统的运动副,包括旋转副、滑动副以及齿轮齿条副的具体配置方法。文中还特别强调了仿真过程中需要注意的技术细节,如参数设置、摩擦系数的选择、运动自由度的限制等。此外,作者分享了一些实用技巧,比如通过正弦函数驱动转向输入、利用传感器监测运动状态、导出并修改仿真动画等。 适合人群:从事汽车工程设计、机械仿真的工程师和技术人员,尤其是熟悉CATIA软件的用户。 使用场景及目标:适用于需要进行车辆转向系统和悬架系统联合仿真的场合,帮助工程师更好地理解和优化车辆动态性能,提高设计效率。 其他说明:文章提供了大量具体的VBA代码片段,便于读者直接应用于自己的项目中。同时,文中提到的一些调试经验和常见问题解决方法也非常有价值。

    基于javaweb的学生成绩管理系统 .zip

    基于Javaweb(servlet+mysql)

    全桥LLC谐振变换器仿真与电压环PI控制:高压输入场景下的设计与优化

    内容概要:本文详细介绍了全桥LLC谐振变换器的设计与仿真,特别是针对高压输入(370-405V)和高功率输出(1000W,25V/40A)的应用场景。文章首先解释了全桥LLC谐振变换器的基础结构及其优势,接着展示了如何通过Python代码计算谐振频率,并通过MATLAB/Simulink进行了详细的电压环PI控制仿真。文中特别强调了PI控制器参数的优化,如比例系数(Kp)和积分系数(Ki)的选择,以及抗积分饱和处理的方法。此外,还探讨了轻载情况下的次谐波振荡问题及其解决方案,如频率钳位和动态调整PI参数。最后,通过仿真数据展示了不同输入电压条件下的性能表现,包括输出电压稳定性、恢复时间和效率。 适合人群:从事电力电子设计、电源管理系统的工程师和技术爱好者,尤其关注高效能电源转换和控制系统的人群。 使用场景及目标:适用于需要设计和优化全桥LLC谐振变换器的工程项目,特别是在高压输入和高功率输出的应用场合。目标是确保输出电压稳定,提高系统效率,并减少开关损耗。 其他说明:文中提供的代码和仿真结果仅为示例,实际应用中需要进一步的理论分析和完善的设计。此外,文中还提及了一些实际调试过程中遇到的问题及解决方案,有助于读者更好地理解和应对类似的技术挑战。

    交错并联Boost PFC电路的Simulink双闭环控制仿真建模与优化

    内容概要:本文详细介绍了交错并联Boost PFC电路的设计及其在Simulink中的双闭环控制仿真方法。交错并联Boost电路通过两个Boost模块相位差180度的工作方式,有效降低了输入电流纹波,减轻了元器件的压力。文中重点讨论了输出电压外环和电感电流内环的双闭环控制策略,以及具体的PI参数设置和调优技巧。通过合理的参数选择和控制策略,实现了较低的总谐波失真(THD)和稳定的输出电压。此外,还探讨了仿真过程中常见的问题及解决方案,如电流环带宽设置、积分时间调整、PWM相位同步等。 适合人群:从事电力电子设计、电源管理系统的工程师和技术人员,尤其是对PFC电路和Simulink仿真感兴趣的读者。 使用场景及目标:适用于需要进行PFC电路设计和仿真的场合,旨在提高输入电流质量,减少谐波失真,确保输出电压的稳定性。通过学习本文,读者能够掌握交错并联Boost PFC电路的设计思路和仿真技巧,为实际项目提供理论支持和技术指导。 其他说明:文中提供了详细的MATLAB/Simulink代码片段和参数设置建议,帮助读者更好地理解和应用所介绍的技术。同时,强调了仿真过程中需要注意的关键点,避免常见错误,确保仿真结果的有效性和准确性。

    炼石图解网络数据安全管理条例及数据安全合规与技术体系2024630页.pdf

    炼石图解网络数据安全管理条例及数据安全合规与技术体系2024630页.pdf

    电动车电驱系统中电机控制器的主动阻尼控制与转矩补偿技术研究及应用

    内容概要:本文深入探讨了电动车电驱系统中电机控制器的关键技术——主动阻尼控制及其相关技术的应用。文中介绍了主动阻尼控制的基本概念,即通过一系列控制策略使系统有效抵抗振动,特别是通过转矩补偿和加速度反馈来增强系统的稳定性。作者详细展示了如何利用Matlab二质量模型进行系统动态特性的模拟,并通过巴特沃斯高通滤波器提取转速波动来进行转矩补偿。此外,还讨论了加速度反馈的作用,即通过增加电机惯量来减少振动。最后,文章通过实际案例展示了这些技术的有效性,显著提高了电动车电驱系统的稳定性和可靠性。 适合人群:从事电动车电驱系统开发的技术人员、研究人员及高校相关专业师生。 使用场景及目标:适用于电动车电驱系统的设计与优化,旨在提高系统的稳定性和可靠性,减少振动和噪声,改善驾驶体验。同时,该技术有助于延长传动系统的使用寿命,降低故障率。 其他说明:文章不仅提供了详细的理论和技术背景,还包括具体的代码实现和实际应用案例,便于读者理解和实践。此外,文中提供的仿真模型和详实文档为后续研究和项目优化提供了有力支持。

    MATLAB/Simulink环境下基于增量电导法的太阳能光伏发电系统MPPT技术实现与优化

    内容概要:本文深入探讨了增量电导法(Incremental Conductance, INC)在太阳能光伏发电系统最大功率点跟踪(MPPT)中的应用。首先介绍了增量电导法的基本原理及其相对于扰动观测法的优势,特别是其在光照快速变化时的高效性能。接着展示了MATLAB核心代码实现,详细解释了电导变化率的计算以及占空比调整逻辑。随后讨论了Simulink建模的具体步骤和技术细节,如采样周期设定、PWM模块配置等。此外,针对不同应用场景提出了参数调试建议,包括步长选择、温度对步长的影响、负载电流前馈补偿等。最后分享了一些实用经验和注意事项,如避免数值震荡、处理光照突变等。 适合人群:从事光伏系统设计与开发的工程师,尤其是对MPPT算法感兴趣的科研人员和技术爱好者。 使用场景及目标:适用于希望深入了解并掌握增量电导法MPPT技术的研究人员和工程师。主要目标是通过理论讲解和实例代码帮助读者理解增量电导法的工作原理,并能够在MATLAB/Simulink环境中构建高效的MPPT控制系统。 其他说明:文中提供了详细的代码片段和具体的参数设置指导,有助于读者进行实际操作和实验验证。同时强调了在不同条件下(如光照突变、温度变化)的算法优化策略,使系统更加稳健可靠。

Global site tag (gtag.js) - Google Analytics