论坛首页 海阔天空论坛

绝对不虚此行的活动 - 记Gavin King上海交流研讨会

浏览 50915 次
该帖已经被评为精华帖
作者 正文
   发表时间:2007-04-20  
大师很幽默啊,想不到friends中Ross的经典“兔子手势”,Gavin用的如此地道。向Robbin说声不好意思,你和Gavin合影时忘记走开了,^_^~
0 请登录后投票
   发表时间:2007-04-20  
我也是这么做的。
Readonly 写道
Robbin 写道

双向关联,inverse=“true”的情况下应避免使用集合缓存

这个是因为你的这个实践建议造成的:
Robbin 写道

在分层结构中通过DAO接口用session直接持久化对象,避免通过关联关系进行可达性持久化

这样就会带来内存模型和数据库模型不一致的情况

偶的实践建议是相反的:通过关联关系进行可达性持久化

在Parent上有这种方法:
add(Child child) {
  child.setParent(this);
  children.add(child);
}

remove(Child child) {
    child.setParent(null);
    children.remove(child);
}


设置inverse = true 和 cascade = all-delete-orphan
删除某个child的操作就变成一句话搞定:
parent.remove(child)


这样内存和数据库保持完美一致,而且代码写起来也简单,不需要ChildDAO上有啥create/delete/update/ Child的方法

双向关联的2级缓存也是非常好用的
0 请登录后投票
   发表时间:2007-04-20  
不知道为啥Gavin King会热衷于JSF这种基于事件驱动的Web层框架,实在是不能理解。

最近在用JSF+Spring webflow做项目,那叫一个痛苦。不仅说它的编程模型特别诡异,让我们这种熟悉了传统MVC概念的程序员无法接受,最要命的是它特别喜欢用Tag,做出来的页面是不能View的,这是最最无法交流的地方了。按照robbin的说法,直接对这个东西判了死刑。[/]
对JSFtag支持最好的工具是 BEA Workshop,与你类似,我们用JSF+Spring+Hibernate做了2个项目,JSF简直太猥琐了,遇到的问题还是都解决了,但是不漂亮。这个事件驱动模型,缺少纯URL的action,感觉很不爽。所以,后续项目我已经和其他同事达成共识,要么用Struts1.2,要么用Struts2.
0 请登录后投票
   发表时间:2007-04-20  
昨天参加活动的确不虚此行,GavinKing的发言还是需要具备一定的听力水平才能听懂,我只能听懂一部分:(,而且感觉是绝大部分是他在做广告:P,比如他一直在讲Hibernate是多么的标准,Hibernate里面的子项目以及JBOSS Seam的好处,顺便说说Spring和ROR的坏话。总得来讲GavinKing所构想的未来就是在指定标准,而所有使用他推崇这一套东西的理由就是标准,甚至包括JBOSS Seam他都打算整成标准,还举例Hibernate在EJB2的时候也不是标准……会不会在几年以后JEE的标准会变成JSF+EJBX+JBOSS Seam?感觉是一个超重量级的东西,至于这套构想能否重现Hibernate的成功就要看GavinKing的造化了。
本来我昨天是坚持录了一段视频的,结果录了30多分钟的时候突然手机没电了,全部都白录 要不还可以拿出来分享一下给没有听到的人……  不过GavinKing的狂多的兔子手势和那诡异的表情还是和搞笑的。

而讲座中最有价值的部分就属Robbin的性能优化了,的确是有指点迷津的作用,就是讲的太快了点……最后Robbin关机的时候发现他的电脑关机的提示是Hibernate...而不是系统正在关机,足见他和Hibernate的感情

最后曹晓钢的JBoss Seam的介绍没有上次活动他的那个开源报表吸引人,毕竟Seam在国内还不火热,但是感觉曹晓刚比年前帅多了。
0 请登录后投票
   发表时间:2007-04-20  
downpour 写道
不过也有的时候,这种做法很难施展拳脚。比如说,有很多典型的业务系统,它不允许有物理删除这个概念,必须打上disabled标志表示删除。那么这个时候,这个双向的关联就显得很苍白无力,我在这种情况下,除了使用robbin的这个思路,还没有想到有什么很好的解决方法。


这个简单,保持Parent remove方法签名不变:
remove(Child child){
  child.setDisabled(true);
  children.remove(child);
}


mapping文件上加上where
<bag name="children" lazy="true" inverse="true" cascade="all-delete-orphan" where="disabled = false">
    <key column="parent_id"/>
    <one-to-many class="Parent"/>
</bag>


另外,前面Arthas.Hui讲的方法也是很好的,只是光一个disabled属性还不值得偶们这样做,常见的业务系统里面往往还需要记录2者关系的开始时间,结束时间,状态等等,这个时候多一个RelationShip entity才有点意义。
0 请登录后投票
   发表时间:2007-04-20  
JSF在大部分规范化的页面中还是比较好用的,太灵活的页面自然就力不从心了,这一点包括ASP.NET也不例外。那种太灵活的页面用请求驱动的框架会好一点,最简单就是直接写JSP。
JSF在IDE不到位的情况下是不能View的。本人经验,先用纯HTML将页面效果做好,再加入tag比较容易。本人编辑JSF向来是用EditPlus那样的文本编辑器,tag写熟了也就习惯了。
0 请登录后投票
   发表时间:2007-04-20  
引用
另外,前面Arthas.Hui讲的方法也是很好的,只是光一个disabled属性还不值得偶们这样做,常见的业务系统里面往往还需要记录2者关系的开始时间,结束时间,状态等等,这个时候多一个RelationShip entity才有点意义。

多出一张关系表来,剩下的只能面向sql编程了,不过现在觉得sql挺好的,DB的快速反应java程序只能望而兴叹
0 请登录后投票
   发表时间:2007-04-20  
Readonly 写道

另外,前面Arthas.Hui讲的方法也是很好的,只是光一个disabled属性还不值得偶们这样做,常见的业务系统里面往往还需要记录2者关系的开始时间,结束时间,状态等等,这个时候多一个RelationShip entity才有点意义。


潜在需求,呵呵。
0 请登录后投票
   发表时间:2007-04-20  
昨天没去,后悔了:(
0 请登录后投票
   发表时间:2007-04-21  

hurricane1026 写道:

呵呵。举个例子,gavin king是傻子么?他会真的觉得,他说了就会被当圣经一样遵守么?不过他作为掌门人,如果说了对方的好话,马上就会被媒体抓住,还可以被断章取义,这不是媒体的惯用手段么。他本来就是来做宣传的。就好像gates拼命吹嘘的windows,他自己不知道win的那些问题和问题么?但是他不能说。
所以大家不能要求gavin从一个中立者的角度来发言。他作为市场中竞争的一方。不可能说所谓中立的话。seam和spring、ror的胜负是合他本人利益挂钩的。。他能怎么说?



呵呵,纯属对他讲座内容的客观描述,至于他说的内容完全可以理解
0 请登录后投票
论坛首页 海阔天空版

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