`
apusiczhang
  • 浏览: 17398 次
  • 性别: 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站点。...

    直播项目微信小程序源码(类似于微信视频通话).zip

    《直播项目微信小程序源码简介》 本资源是一份极具学习价值的直播项目微信小程序源码,类似于微信视频通话功能。它为开发者提供了一个完整的直播项目框架和实现逻辑,可用于深入研究直播技术在小程序中的应用。 该源码涵盖了直播项目的核心功能模块,包括视频采集、推流、播放等关键部分。通过对其代码结构的研究,开发者可以了解到如何利用微信小程序的相关接口和功能来实现流畅、稳定的直播体验。例如,在视频采集方面,源码展示了如何在小程序中调用设备摄像头,并进行实时视频数据的处理;在推流环节,详细阐述了如何将采集到的视频数据推送到服务器,以供其他用户观看;而在播放部分,则清晰地展示了如何在小程序界面上实现视频的流畅播放和控制。 这份源码不仅有助于开发者掌握直播技术在小程序中的实际应用,还能为进一步开发和优化直播类小程序提供宝贵的参考和借鉴,是一份不可多得的学习资源。

    详细阐述了中国智慧医疗建设的发展历程、现状、挑战及未来趋势 以下是文章的主要内容总结:

    内容概要:本文详细探讨了智慧医疗建设的历程、现状、挑战及未来发展趋势。智慧医疗建设经历了信息化、数字化和数智化三个阶段,政策、需求和技术是其发展的三大推动力。文章指出,当前智慧医疗已从数据收集与治理阶段迈向数据价值应用阶段,特别是在高质量数据库建设、云计算、人工智能等技术的推动下,实现了临床科研、药物研发、真实世界研究及数字营销等多个场景的商业化落地。此外,文中还分析了医疗信息化系统同质化、数据孤岛、互联互通等痛点,并提出了云化转型、新产品、新技术和新服务作为突破方向。最后,通过奈特瑞、医渡科技、东软集团三个企业案例,展示了不同企业在智慧医疗领域的创新实践。 适合人群:医疗信息化从业者、医疗行业研究人员、医疗机构管理者、医疗科技企业相关人员、政策制定者及对智慧医疗感兴趣的投资者。 使用场景及目标:①了解智慧医疗建设的阶段性特征和发展趋势;②掌握医疗信息化建设中的关键技术和应用场景;③探讨解决医疗信息化系统同质化、数据孤岛等问题的策略;④学习企业如何通过新产品、新技术和新服务实现突破,推动智慧医疗发展。 其他说明:本文通过对智慧医疗建设的深入剖析,强调了政策导向、技术创新和市场需求的重要性,为企业和政策制定者提供了宝贵的参考。同时,文章也揭示了未来智慧医疗发展的广阔前景,特别是在数据资产化和数智化应用方面的巨大潜力。阅读时应注意结合政策背景和技术发展趋势,关注行业动态和企业创新实践。

    电机设计领域中8级48槽永磁同步电机振动噪声分析的Motor CAD应用

    内容概要:本文详细介绍了利用Motor CAD软件对8级48槽永磁同步电机进行振动噪声分析的方法和步骤。主要内容涵盖前期准备工作,如软件环境搭建和基本原理的理解;建立电机模型的具体细节,包括定子和转子部分的参数设置;振动噪声分析的相关设置,特别是电磁力波的计算方法及其重要参数的设定;以及最终分析结果的解读,包括振动模态图和噪声频谱分析结果的应用。通过这些步骤,可以识别出导致较大振动和噪声的问题所在,并提出针对性的优化措施,如调整槽配合、优化永磁体形状等,以改善电机的整体性能。 适合人群:从事电机设计与优化的专业人士,尤其是对永磁同步电机振动噪声分析感兴趣的工程师和技术人员。 使用场景及目标:适用于希望深入了解和掌握Motor CAD软件在电机振动噪声分析方面应用的技术人员。目标是在实际工作中能够运用所学知识,提高电机的设计质量和性能,减少不必要的振动和噪声。 其他说明:文中提供了大量具体的代码片段和操作指南,帮助读者更好地理解和实践。同时强调了电磁-机械-声学耦合的重要性,指出结构设计对于降噪的关键作用。

    【计算机教育】计算机专业课后习题高效学习策略:构建知识体系与应对考试重点

    内容概要:本文是一篇面向计算机类专业学生的课后习题学习指南,强调课后习题对于构建专业知识体系的重要性。文章指出,做题不仅是为了完成任务或应付考试,更重要的是理解知识点背后的原理。文中详细介绍了不同课程类型的习题应采用的不同方法,如程序设计类需多动手调试,数据结构与算法类要手动画图并多敲代码等。同时提醒学生注意考试重点往往隐藏在课后题中,并提倡通过迭代学习巩固知识,避免常见错误。 适合人群:计算机类专业的学生,特别是那些在课后习题练习中遇到困难或希望提高学习效率的人群。 使用场景及目标:①帮助学生掌握正确的课后习题练习方法;②指导学生根据课程特点选择合适的做题策略;③提醒学生关注课后题中的潜在考试重点;④通过迭代学习的方式强化理解和记忆。 阅读建议:本文提供了实用的学习技巧和建议,读者应在实际做题过程中尝试运用这些方法,不断调整和优化自己的学习方式,以达到更好的学习效果。

    四旋翼无人机轨迹跟踪:PID与自适应滑模控制的Matlab仿真研究

    内容概要:本文详细探讨了四旋翼无人机(UAV)的轨迹跟踪控制技术,重点介绍了两种主流控制方法:PID控制和自适应滑模控制。首先,文章阐述了PID控制的基本原理及其在Simulink中的具体实现步骤,展示了如何通过调节PID参数实现稳定的轨迹跟踪,并提供了详细的Matlab代码示例。接着,文章深入讲解了自适应滑模控制的工作机制,强调了其对系统不确定性的强鲁棒性特点,并给出了相应的Matlab实现代码。此外,文中通过多种图表形式展示了不同控制方法下的仿真结果,直观比较了它们的优缺点。最后,作者总结指出,PID控制适合于系统模型较为确定的情况,而自适应滑模控制则更适合应对复杂的外部环境和不确定性因素。 适合人群:对无人机控制系统感兴趣的科研人员、工程技术人员及高校相关专业学生。 使用场景及目标:①帮助读者理解并掌握PID和自适应滑模控制的基本原理;②提供具体的Matlab/Simulink实现案例,便于读者进行实际操作练习;③通过对两种控制方法的对比分析,指导读者选择合适的控制策略应用于实际项目中。 其他说明:文章不仅提供了详尽的技术细节,还包括了许多实用的小技巧和经验分享,有助于提高读者的实际动手能力和解决问题的能力。

    电力电子领域LLC谐振变换器PFM+PSM混合控制仿真及其应用

    内容概要:本文详细探讨了LLC谐振变换器中变频移相(PFM+PSM)混合控制的仿真研究与实现。首先介绍了这种方法可以拓宽输入电压范围,确保MOS管的零电压开通(ZVS)和二极管的零电流关断(ZCS),从而降低开关损耗并提高变换器效率。接着展示了在Matlab/Simulink和Plecs环境下的具体实现步骤,包括关键参数设置、模式切换逻辑以及波形展示。文中还强调了参数整定的重要性,如谐振腔Q值的影响,并给出了具体的解决方案。此外,讨论了仿真过程中需要注意的问题,如仿真步长的选择和软开关条件的检测。 适合人群:从事电力电子设计的研究人员和技术工程师。 使用场景及目标:适用于需要设计高效、稳定电力转换系统的场合,特别是在输入电压范围较广的应用中,如光伏逆变器。目标是通过合理的控制策略实现更高的效率和平滑的工作状态。 阅读建议:读者应重点关注PFM和PSM模式的具体实现细节,尤其是两者之间的平滑切换逻辑,同时也要注意仿真工具的选择和参数调整技巧。

    【移动应用开发】VIP学习资源整合:涵盖Android、iOS、React Native及Flutter的开发工具、资源与社区

    内容概要:本文汇总了移动应用开发领域的VIP学习资源,涵盖从基础入门到进阶提高的全方位内容。基础资源方面,推荐了针对Android、iOS、React Native的多本经典书籍及Udemy、Coursera、edX等平台上的在线课程和YouTube视频教程,帮助初学者掌握UI设计、数据存储、前后端交互等基本技能。进阶资源则聚焦于高效编程、性能优化、架构设计等深层次主题,同样提供了书籍、在线课程和视频教程。对于跨平台开发,重点介绍了React Native和Flutter的相关学习资料。此外,还列举了Android Studio、Xcode等常用开发工具及其配套调试工具,以及Flutter Gallery、React Native Showcase等开源项目作为实践参考。最后,提及了Stack Overflow、Reddit - AndroidDev等社区论坛,为开发者提供交流平台。 适合人群:对移动应用开发感兴趣的初学者、有一定经验的研发人员及希望深入了解跨平台开发的开发者。 使用场景及目标:①初学者可以通过书籍、在线课程和视频教程系统学习移动应用开发的基础知识;②进阶者可利用进阶资源深入研究特定技术领域,如性能优化、架构设计等;③跨平台开发者可以借助React Native和Flutter的学习资料实现多平台应用开发;④使用推荐的开发工具和调试工具提高开发效率,解决实际问题;⑤通过开源项目和社区论坛获取实践经验和技术支持。 阅读建议:根据个人技术水平选择合适的资源进行学习,注重理论与实践相结合,积极参与社区交流,不断提升自己的移动应用开发能力。

    【深度学习框架】Caffe与Python接口的使用指南:从安装到模型部署的全流程解析

    内容概要:本文详细介绍了深度学习框架Caffe及其Python接口的使用方法。首先概述了Caffe的特点,如速度快、支持多种神经网络类型(CNN、RNN、LSTM),并提供预训练模型库。接着阐述了Caffe的安装步骤,包括系统要求、依赖库安装、源码编译及Python接口的配置。随后,文章通过多个示例展示了如何使用Python接口加载模型、预处理数据、执行前向传播和进行预测。此外,还介绍了模型训练流程,包括配置训练参数、使用Python接口训练模型、动态调整超参数等。最后,讨论了模型部署与应用,涵盖模型定义、训练、转换、加载、预测及性能评估等方面,并提供了常见问题的解决方案。; 适合人群:对深度学习有一定了解并希望使用Caffe框架进行模型开发的研究人员和工程师。; 使用场景及目标:①掌握Caffe框架的安装配置;②学会使用Python接口加载模型、预处理数据、执行前向传播;③理解模型训练流程,包括配置训练参数和动态调整超参数;④熟悉模型部署与应用,如模型定义、训练、转换、加载、预测及性能评估。; 阅读建议:由于Caffe的Python接口涉及较多的技术细节,建议读者在阅读时结合实际操作练习,逐步掌握每个步骤的具体实现方法。同时,可以参考官方文档和社区资源,加深对Caffe的理解和应用。

    基于西门子200PLC与组态王6.53的锅炉内胆温度控制系统设计与实现

    内容概要:本文详细介绍了使用西门子200PLC和组态王6.53实现锅炉内胆温度控制系统的全过程。首先,通过PLC采集温度数据并进行控制逻辑编程,确保温度保持在设定范围内。其次,组态王用于创建可视化界面,使用户能够实时监控和调整温度参数。文中还展示了具体的梯形图编程实例,如温度采集、控制逻辑、PID调节等,并讨论了常见的调试技巧和注意事项。此外,提供了运行效果视频,直观展示了系统的实际性能。 适合人群:从事工业自动化领域的工程师和技术人员,特别是熟悉PLC编程和HMI软件使用的专业人士。 使用场景及目标:适用于需要精确控制温度的工业应用场景,如化工、制药等行业。主要目标是提高温度控制的精度和稳定性,减少能源消耗,提升生产效率。 其他说明:文中提到的一些具体技术和参数(如PID参数、定时器设置等)可以根据实际情况进行调整优化。同时,强调了硬件配置和接地处理的重要性,以确保系统的可靠性和抗干扰能力。

    微纳光学中COMSOL仿真:铌酸锂和频转换与磁偶极子准BIC反射相位计算

    内容概要:本文详细介绍了COMSOL在微纳光学领域的应用,重点探讨了两个方面:一是基于X切型绝缘体上铌酸锂薄膜(LNOI)进行和频产生(SFG)转化效率的仿真,二是磁偶极子贡献下的准BIC斜入射反射相位计算。文中不仅解释了相关理论背景,还展示了具体的参数设置方法和仿真步骤,如自定义入射基频波长、光强、偏振方向等,并通过实例演示了如何在COMSOL中实现这些仿真的具体操作。此外,文章还讨论了不同参数对SFG转化效率和反射相位的影响,强调了材料性质、入射角度、光强等因素的关键作用。 适合人群:从事微纳光学研究的科研人员和技术开发者,尤其是那些希望深入了解COMSOL仿真技术及其在非线性光学和准BIC现象中应用的人群。 使用场景及目标:①帮助研究人员更好地理解和优化LNOI材料中的SFG转化效率;②辅助设计高性能的微纳光学器件,如高Q值谐振腔、高效反射镜或滤波器等;③为探索新的光学现象提供理论支持和技术手段。 其他说明:文章提供了详细的仿真代码示例和避坑指南,便于读者快速上手并避免常见错误。同时,作者鼓励读者通过参数化扫描等方式挖掘更多潜在的新物理现象。

    2025 STM32单片机YT2号-任务2-键控LED【嵌入式系统】基于STM32单片机的按键控制LED设计:洋桃2号开发板任务实现与代码解析

    内容概要:本文档详细介绍了使用STM32CubeIDE开发环境在洋桃2号开发板上实现按键控制LED的功能。首先,指导用户解压并打开任务2的工程文件,然后进行GPIO参数配置,包括4个按键和4个LED的设置。接下来,通过建立BSP文件夹及其内部的C和H文件来组织代码结构,提供了延迟、LED控制以及按键检测的具体代码实现。每个LED都有独立的控制函数,可以单独点亮或熄灭,并支持整体操作。按键检测函数能够识别按键按下事件并返回相应的状态值,同时处理了按键抖动的问题。最后,文档还简述了编译、运行和调试代码的基本步骤。 适合人群:具有初步单片机编程基础的学生或工程师,特别是对STM32系列微控制器有一定了解的人士。 使用场景及目标:①学习STM32CubeIDE开发环境的使用方法;②掌握GPIO端口配置及基本外设控制;③理解按键去抖动机制和LED驱动程序的设计与实现;④熟悉嵌入式系统的开发流程,包括代码编写、编译、下载和调试。 阅读建议:此文档适用于实际动手操作,读者应按照文档步骤逐步进行实验,同时参考提供的代码示例,以便更好地理解和掌握相关知识点。在遇到问题时,可以通过查阅官方文档或在线资源来解决问题。

    基于uni-app开发的菜谱小程序新版源码.zip

    《基于 uni-app 开发的菜谱小程序新版源码》简介 这是一份极具实用价值的学习资源——基于 uni-app 开发的菜谱小程序新版源码。uni-app 凭借其多端适配的强大特性,一次开发就能在多个平台运行,极大地提升了开发效率与应用覆盖范围。 此菜谱小程序源码功能丰富。它拥有精美且简洁直观的界面设计,方便用户快速上手操作。在内容呈现上,涵盖了海量的菜谱资源,无论是家常小菜、地方特色菜肴,还是异国料理,都能在其中找到详细的做法教程,步骤清晰,图文并茂,甚至部分还搭配了视频讲解,让烹饪新手也能轻松学会。 对于开发者而言,这份源码是学习 uni-app 开发的绝佳范例。可以深入研究其代码架构、页面布局、数据交互以及各种功能的实现逻辑,从中汲取经验,提升自己在跨平台移动应用开发方面的能力,更好地理解 uni-app 框架的优势与应用场景,为后续的开发项目奠定坚实的基础,助力开发出更多优质且高效的应用程序。

    电动汽车永磁同步电机设计:基于Prius 2004的Excel计算、Maxwell仿真与MotorCAD温升分析

    内容概要:本文深入探讨了丰田Prius 2004永磁同步电机的设计过程,涵盖了从Excel设计程序到Maxwell参数化仿真的各个环节。首先介绍了利用Excel进行初步设计计算的方法,通过设定关键参数如功率、转矩等,计算出电机的体积、叠厚、匝数等重要设计指标。接着讨论了Maxwell参数化仿真模型的应用,展示了如何通过调整参数并运行仿真,直观地观察磁场分布和转矩波动等结果。此外,文章还提到了橡树岭实验室提供的拆解和实测数据,强调了这些一手资料对于验证设计和仿真的重要性。最后,介绍了MotorCAD模型在温升仿真分析中的应用,解释了如何设置热学参数并预测温度分布,确保电机的稳定性和可靠性。 适合人群:从事电动汽车电机设计的研究人员和技术人员,以及对电机设计感兴趣的工程专业学生。 使用场景及目标:适用于需要深入了解永磁同步电机设计原理和方法的人群,旨在提供从理论到实践的全面指导,帮助读者掌握电机设计的关键技术和工具。 其他说明:文章不仅提供了详细的理论讲解,还附带了大量的实例和代码片段,便于读者理解和实践。同时,文中提到的多种工具和方法可以相互结合,形成一套完整的电机设计流程。

    (源码)基于C语言的TCPIP网络编程.zip

    # 基于C语言的TCPIP网络编程 ## 项目简介 本项目是一个基于C语言的TCPIP网络编程学习项目,涵盖了从基础的套接字编程到高级的多线程服务器设计。项目内容包括TCP和UDP协议的使用、多线程编程、IO复用、信号量和互斥量的应用等。通过这些内容的学习和实践,开发者可以深入理解网络编程的核心概念和技术。 ## 项目的主要特性和功能 1. TCPIP编程 创建TCP服务器和客户端,实现基本的网络通信。 使用套接字进行数据的发送和接收。 处理TCP连接的建立、数据传输和断开。 2. 多线程编程 使用pthread库创建和管理线程。 在多线程环境中处理共享资源,如全局变量和文件描述符。 通过信号量和互斥量实现线程同步,确保对共享资源的正确访问。 3. IO复用 使用select()和epoll实现IO复用,提高服务器的并发处理能力。 处理多个客户端的并发连接和数据传输。

    财务分析的哈佛框架.ppt

    财务分析的哈佛框架

    电磁学领域中Comsol/CST模拟狄拉克半金属BDS超材料的Matlab脚本与模型应用

    内容概要:本文详细介绍了使用Comsol和CST软件模拟狄拉克半金属BDS超材料的方法和技术细节。文中不仅解释了这两种软件在处理电磁、热等多物理场耦合方面的优势,还提供了具体的Matlab脚本用于超材料的数据预处理和后处理,如计算波数、模拟散射图案等。此外,文章分享了多个CST模型实例,包括简单单元结构模型和周期阵列模型,展示了如何通过调整材料参数和结构设计来优化超材料的电磁响应特性。同时,针对BDS超材料在太赫兹波段的独特电磁响应,提出了若干实用的设计和仿真技巧,如交叉偏振设计、时域求解器设置以及边缘场校正等。 适合人群:从事电磁学、材料科学领域的研究人员和技术人员,尤其是对超材料设计感兴趣的科学家。 使用场景及目标:适用于需要深入理解和掌握超材料电磁响应特性的科研项目,旨在提高超材料设计效率和精度,探索新的电磁调控方法。 其他说明:文章提供的Matlab脚本和CST模型能够帮助读者更好地理解和应用狄拉克半金属BDS超材料的相关理论和技术,促进学术交流和技术进步。

Global site tag (gtag.js) - Google Analytics