浏览 2554 次
锁定老帖子 主题:为什么不能更懒一些?
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-04-24
AllAuthors allAuthors = God.giveMe(AllAuthors.class); SomeAuthors someAuthors = allAuthors.findAuthorsWhoseBirthdayBetween(1960, 1975); AllArticles allArticles = God.giveMe(AllArticles.class); SomeArticles someArticles = allArticles.findArticlesByItsAuthor(someAuthors); Iterator<Article> iterator = someArticles.iterate(); while(iterator.hasNext()) { Article article = iterator.next(); System.out.println(article.getTitle() + ", " + article.getAurthor().getName()): } SELECT Article.Title, Author.Name From Article, Author Where Article.AuthorId = Author.Id AND Aurthor.Birthday BETWEEN 1960 AND 1975; 还可以是Lazy Insert,Lazy Update。这样可行么? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-04-24
我觉得Lazy Load主要是用于如下条件的环境:
1、用户调用的时候还不知道哪些数据会被用到; 2、这些数据在一定的Context里是可重复利用的,加载一次后以后就不需要重新加载。 而Lazy Query,至少从你的例子里有以下问题:判断逻辑太过于复杂,最终需要的数据是文章标题和作者名称,而最早用户调用的方法则是findAuthorsWhoseBirthdayBetween、findArticlesByItsAuthor,这2个方法调用后可以支持很多查询,这样子你要缓存很多查询后的结果,不如用Lazy Load缓存Authors和Articles信息,要查询的时候你再组装查询结果。 至于Lazy Insert、Lazy Update,基本上用户调用了方法你就需要完整的实现,不会像Lazy Load可以达到不取用不着的数据的优点。当然多次更新数据库可能可以合并一些sql语句甚至可以删除掉一些无效的sql语句以提高效率(类似于编译器的优化功能),但是这个逻辑就比较复杂了,是否必要是个问题。 |
|
返回顶楼 | |
发表时间:2007-04-24
findAuthrosWhoseBirthdayBetween和findArticlesByItsAuthor都不会去查询数据库,只会把查询的条件给记录下来。实际上就是QueryCriteria。最后要取得具体数据的时候,查询才会发生。
如果存储不是基于SQL数据库的,没有SQL这码事,代码写成这样是不是就没有异议了呢? |
|
返回顶楼 | |
发表时间:2007-04-24
太多重复代码,直接让上帝干活
God.findAuthorsWhoseBirthdayBetween(1960, 1975); God.printWhatYouFind(findArticlesByItsAuthor(someAuthors)) 上帝无所不在,还需要lazy干吗? |
|
返回顶楼 | |
发表时间:2007-04-25
God类是用来代替new的。因为Allxxx这样的collection都是abstract,具体的查找逻辑是由框架来做实现的。就像ActiveRecord的findBy是由框架来实现一样。
|
|
返回顶楼 | |