2016-07-27 27 views
0

我目前是一位初学者开发人员,他正在尝试使我的方法进入android java开发世界。设计模式:使用Null来最小化繁重的数据库查询

今天我的问题适用于大多数OOP驱动的概念。

让我明白这一点。我的Android应用程序有一些活动和方法,导致数据库查询非常繁重,这使得它非常缓慢,特别是因为我使用ORM(SugarORM)使事情变得更快(明智的开发)并且减少了错误。

我已经找到了解决方案,它似乎工作得很好,但是,我认为最好在整个应用程序整合之前询问它。只是想知道这是否是一种不好的做法。

不幸的是,谷歌是不是很有帮助,主要是因为搜索一个类似的问题所需的关键字总是带我到空对象模式:我执行

例子:

private List<Book> mBooks; 

public List<Book> getBooks() { 
    if (this.mBooks == null) 
     this.mBooks = SugarRecord.listAll(Book.class); 
    return this.mBooks; 
} 

public List<Book> onBookListUpdated() { 
    this.mBooks = null; 
} 

正如你可以看到这保证了(至少直到列表预期已经改变)查询只执行一次。

我需要知道的是,如果这是有道理的,有多少程序员会真的做这样的事情,如果它是一个东西叫什么?

此外,如果它是'好'做的话,将这个逻辑包装到一个类中是不是一个好主意?

这样说:

public class FastList<T> { 

    public interface iFastList<TT> { 
     List<TT> reloadList(); 
    } 

    public FastList(iFastList<T> inCallback) { 
     this.callback = inCallback; 
    } 

    private iFastList<T> callback 

    private List<T> currentList; 

    public List<T> getList() { 
     if (this.currentList == null) 
      this.currentList = this.callback.reloadList(); 
     return this.currentList; 
    } 

    public void onListChanged() { 
     this.currentList = null; 
    } 
} 

在此先感谢所有将需要时间来回答。

+0

其常见。它有一些缺点。首先,如果您更改列表中的任何内容,您必须确保致电更新​​。它容易忘记。其次,你可以在任何时候使用全局变量来解决线程问题。但好处往往是值得的。 –

+0

非常感谢你的回答,现在我知道它叫什么了,我可以自己阅读。谢谢 – WiserTheBassist

回答

1

Lazy Intitailization 其在Objective-C非常流行

- (NSMutableArray *) myArray { 
    if(!_myArray) { 
     _myArray = [[NSMutableArray alloc] init]; 
    } 
    return _myArray; 
} 
+0

它在每种语言中都非常受欢迎。整个语言都是围绕懒惰计算构建的,请参阅Haskell和其他函数式语言。 –