用户操作
[即时聊天] [发私信] [加为好友]
buaawhl
最近评论
bruce_lau:看看这个解决方案,对象的缓存和jive差不多,列表也是选id,但是对列表还有缓存,还可以根据字段作散列列表缓存,这样列表的缓存命中率非常高,是一个比较好的数据库缓存解决方案。参见http://shedewang.com/akaladocs/api/com/akala/dbcache/core/BaseManager.html
yipeng6213:个人觉得fastm真的很不错,我之前的模板是用velocity写的,我现在想把它转换成fastm的,但其中velocity模板中的if elseif else 怎么 用fastm替换呢?请问有没有具体的实例 给我参考一下,急!
lidaoguang00109:谢谢您的努力.
这个FastM我使用过了,觉得很不错.
容易上手,特别是可以直接用HTML观察模版的布局形态,有利于界面效果的评估.
现在有一个问题一直困扰我.
就是如果实现一个Table,每一个列被点击后都能排序,用FastM如何实现呢?每一次ValueSet DOM都要重新设置吗?
vkuja2003:楼主做学问的方法很值得学习
noia_zhou:我拜读了你的持久层和cache设计的一些文章,觉得想法很不错。我觉得现在的持久层框架还是挺复杂的,如hibernate等,单看看它10几兆的开发包就知道了,我的初步想法是利用po跟table的字段一致性,通过反射po得到要执行的sql。这样做的好处是少了很多表结构的配置文件。然后做一个简单dao来完成。这里我的想法是做两个dao,一个BaseDao,BaseChaheDao。其中两者都是 继……
文章分类
收藏
    相册
    友情blog
    http://smsbim.bokee.com/
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 Java Web开发构想(5) -- 7.O/R; 8.总结收藏

    新一篇: Domain Pollution Resolution 域污染解除 | 旧一篇: Java Web开发构想(4) -- 6. Web框架

    7O/R

    Hibernate, EJB Entity Bean产品,JDO产品,iBatis是比较流行的几种O/R Mapping Framework

    我做的一些工作中,经常涉及到复杂的优化过的native SQL,并且涉及到大量的批量复杂逻辑处理,现有的O/R框架都不能满足功能和性能要求。

     

    我做出这样一个lightor框架,思路借鉴了Martin Fowler的《企业架构模式》里面讲述的一些O/RRow Mapper,  Column Mapper等概念。

     

    最经典的用法是:

    ResultSet rs = ps.executeQuery( a long complex native sql);

    //will return a lot of records

    A a = new A();

    B b = new B();

    IMapper aMapper = MapperService.getMapper(A.class);

    IMapper bMapper = MapperService.getMapper(B.class);

     

    While(rs.next()){

       aMapper.populate(a, rs);

     bMapper.populate(b, rs);

     

      businessLogic(a, b);

    }

     

    可以看到,Lightor不需要一下子把所有纪录都放到一个Object List里面。完全可以随取随用。整个过程中,a, b只有一份,极大的节省了空间、时间,也极大的提高了开发效率,减少了重复代码。

    没有任何一个其它O/R能够支持这种用法。这里面,lightormapperpopulate方法需要ResultSet参数。一般的O/R不屑于这么做的,别说ResultSet,连Connection都想包装起来不给你看。

     

    Lightor的设计思路也是同时应对简单和复杂。LightorMapper实体部分是自动生成代码。类似于JDO的静态Enhance。不同的是,JDO静态Enhance直接修改bean class。而Lightor则不动原有的bean,只是多生成了对应的Mapper Source/Class。这种方式是最利于跟踪调试的。至于发布部署,和JDO的情况差不多,不如Hibernate的动态代码增强。

    这里我很羡慕Python, Ruby等动态解释语言的特性,根本不需要这些麻烦事。

     

    这一层我主要关注的是性能,缓存策略等等,而不是简便。我觉得,一个应用系统的瓶颈主要存在于O/R, DB层。不应该单纯为了追求OO结构的优雅,或者编程的方便,而牺牲了一些可能优化的地方。

     

    关于Lightor的缓存策略, 我的Blog上有几篇文章。

    http://blog.csdn.net/buaawhl

     

    数据库对象的缓存策略

    http://blog.csdn.net/buaawhl/archive/2004/12/21/224184.aspx

     

    分页 & QueryKey & 定长预取

    http://blog.csdn.net/buaawhl/archive/2005/01/08/245005.aspx

    8.总结

    我理想中的Web开发架构是这样的:

    开发速度快,运行速度快,结构清晰优雅。

    具体到每一层。

    Web框架层主要追求 开发速度快。

    O/R层主要追求 运行速度快。

    页面资源层和页面模板层主要追求 结构清晰优雅。

    发表于 @ 2005年05月31日 08:37:00|评论(loading...)|编辑

    新一篇: Domain Pollution Resolution 域污染解除 | 旧一篇: Java Web开发构想(4) -- 6. Web框架

    评论

    #lqxv 发表于2005-06-07 18:47:00  IP: 61.186.252.*
    我花了一天的时间,把你整个 blog 看了一遍,对你的很多想法感到很新鲜。现在想问一下,你的 Lightor、lightweb 在那里能找到啊?
    #Kabbesy 发表于2005-06-11 13:47:00  IP: 61.186.252.*
    很久没有拜读了
    今天把这个连载的看完了
    对于最后OR部分的lightor,感觉写的很少,还是主要在追求presentation那块的东西?
    #buaawhl 发表于2005-06-17 09:42:00  IP: 61.186.252.*

    lightweb + lightor 还在重构阶段,虽然去年就在sourceforge上申请了项目。但是,lightweb只发布过0.9alpha, 打算整个重构。而lightor还没有发布过,也重构过很多次了。:-)

    sorry. 希望重构完善之后,发布一个结构稳定、性能良好的版本。

    关于O/R的lightor。
    关于Lightor的缓存策略, 我的Blog上有几篇文章。
    http://blog.csdn.net/buaawhl
    数据库对象的缓存策略
    http://blog.csdn.net/buaawhl/archive/2004/12/21/224184.aspx
    分页 & QueryKey & 定长预取
    http://blog.csdn.net/buaawhl/archive/2005/01/08/245005.aspx

    由于很多人都喜欢 hibernate, iBatis, JDO, EJB3.0 等,我不希望宣扬太多写lightor的理由,一定会引发不少“为什么重复发明轮子”、“为什么不直接用现成的最好的东西”。
    所以,之前我就把 缓存策略、性能考虑作为几个分开的主题,写成不同的文章。不希望引起O/R Framework的比较。

    #sqxiao 发表于2005-06-30 20:03:00  IP: 61.186.252.*
    Thanks!
    Open my eye.
    #noia_zhou 发表于2007-07-12 18:22:30  IP: 218.202.3.*
    我拜读了你的持久层和cache设计的一些文章,觉得想法很不错。我觉得现在的持久层框架还是挺复杂的,如hibernate等,单看看它10几兆的开发包就知道了,我的初步想法是利用po跟table的字段一致性,通过反射po得到要执行的sql。这样做的好处是少了很多表结构的配置文件。然后做一个简单dao来完成。这里我的想法是做两个dao,一个BaseDao,BaseChaheDao。其中两者都是 继承同一个接口,可相互替换的。因为如果系统里全部表都用cache的话,内存会受不了的。只在某些表继承BaseChaheDao即可。如果子类继承BaseChaheDao就拥有cache功能。其中怎么设计cache就是一个关键了。
    希望早日看到你发布lightor。我期望它是简单的,轻量的。你的邮箱是多少啊?如果不介意,要不发个现在的lightor给我参考参考,呵呵。我的邮箱是:zhoujiangmail@yahoo.com.cn
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © buaawhl