2016-07-27 23 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和其他函數式語言。 –