`
apusiczhang
  • 浏览: 16937 次
  • 性别: 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>

相关推荐

    OperaMasks快速进阶

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

    机械原理课程设计 破碎机.doc

    机械原理课程设计 破碎机.doc

    电子设计论文施密特触发器电子设计论文施密特触发器

    电子设计论文施密特触发器电子设计论文施密特触发器

    电子设计论文往返式流动灯电子设计论文往返式流动灯

    电子设计论文往返式流动灯电子设计论文往返式流动灯

    基于深度学习来实现序列到序列.zip

    深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。

    美国扩大电动汽车充电基础设施政策(英文).pdf

    政策背景与动机: 签署法案:2021年11月15日,拜登总统签署了《基础设施投资和就业法案》(IIJA),旨在通过多项措施推动美国电动汽车充电基础设施的扩张。 市场增长:随着电动汽车市场的快速增长,对充电基础设施的需求也日益增加,政府政策成为推动这一发展的关键力量。 电动汽车充电基础: 充电技术:电动汽车充电技术通常分为三级,各级充电速度和功率不同,满足不同场景下的充电需求。 充电站类型:包括公共、私人及工作场所充电站,各自具有不同的访问限制和使用特点。 市场趋势与现状: 市场增长:EV市场增长依赖技术进步、成本降低及充电便利性的提高。 充电站数量:截至2022年10月,美国公共和私人充电站总数超过50,000个,其中93%为公共充电站。 区域差异:充电站分布存在地区差异,部分低收入社区充电基础设施不足。 政策与项目: NEVI公式计划:通过IIJA设立的国家电动汽车基础设施(NEVI)公式计划,为各州提供资金以建设EV充电站。 税收抵免:扩展了替代燃料汽车加油站的税收抵免政策,包括EV充电站,以激励投资者。 联合办公室:DOT和DOE成立联合办公室,负责NEVI计划的实施和监管,确保

    电子设计论文照明过暗提醒电路电子设计论文照明过暗提醒电路

    电子设计论文照明过暗提醒电路电子设计论文照明过暗提醒电路

    前端,HTML+CSS的综合案例,网页开发

    我选用的软件是:Visual Studio CODE,这个软件在前端开发中十分常用,且提供了很大的便利。 当然也可以用记事本开发,记得把后缀名改成.html 还有我的CSS使用的是内部样式表。 写在head标签下。用到的标签有  <h1></h1>    <img src="lyf.jpg" class="god">     <p>    </p> 就是这三个标签,构成了HTML的主体架构。 而CSS则是设置了以下形式。 font-size: 16px;             line-height: 32px;             font-family: "Microsoft Yahei";             text-align: left;             text-indent:2em;          text-decoration: none;             color: #888888         width:66px

    MFC MAPI 源码和可执行文件

    大名鼎鼎的MFC MAPI 源码和可执行文件,是开发OUTLOOK插件的好帮手。

    机械原理课程设计插床机构机械设计.doc

    机械原理课程设计插床机构机械设计.doc

    基于深度学习的音频分类 前端App.zip

    深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。

    基于BERT模型的深度学习中文文本分类实现,包含大约20000条新闻的训练和测试集,包装有简单HTTP接口可供调用。.zip

    深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。

    《化工设备机械基础》课程设计 IB储罐设计.doc.doc

    《化工设备机械基础》课程设计 IB储罐设计.doc.doc

    机械原理课程设计网球自动捡球机.doc

    机械原理课程设计网球自动捡球机.doc

    EKFUKFCKF录屏.mp4

    EKFUKFCKF录屏.mp4

    仿新浪读书小程序源码学习

    仿新浪读书小程序源码学习

    基于科大讯飞AI营销算法比赛实现CTR深度学习方法.zip

    深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。

Global site tag (gtag.js) - Google Analytics