0
在我的一個extbase模型中,我想初始化從保存在數據庫中的屬性派生的一些屬性。這些虛擬屬性的計算非常耗時,所以我想緩存它們。因此,我的程序流程應該以某種方式是這樣的:在extbase域模型中初始化後
- 負載域對象像往常一樣從數據庫
- 檢查虛擬財產是在高速緩存中可用。如果是這樣,請從那裏獲取它,否則計算並緩存它。
我首先想到的方法「initializeObject」是我需要的,但它不是:它在任何屬性從數據庫初始化之前調用。所以,我想出了另外兩種方式:
- 我可以手動從庫中提取對象之後調用初始化法,但似乎不可思議,如果有人又增加了
find*
方法一般存儲庫將打破。 - 另一個想法是向模型添加一個布爾型「virtualPropertiesInitialized」,每當訪問其中一個虛擬屬性時進行查詢,並在需要時初始化虛擬屬性。也似乎很奇怪,但不會因爲有人向通用存儲庫添加另一個「查找」方法而中斷。
我的問題是:
是否有缺省的/最佳實踐如何做我想做的事?
這是對我提出如上(旗),第二個解決方案同樣的事情。需要該標誌來防止緩存框架在每次查詢緩存狀態時生成SQL查詢,這會導致每頁渲染出現許多SQL查詢。我認爲我現在就會放棄它,除非指出我更好的方式。 – Jost
而不是定義像''virtualPropertiesInitialized''這樣的屬性,我會添加一個保存該值的成員變量。如果此值爲空,則從緩存中獲取,否則返回持有者。我會將此附加到我的答案。 – Merec
這是一個很好的方式來重新使用屬性作爲標誌,但不會在我的情況下工作:該屬性可能是'null'。 – Jost