對於方法,其中...哪些語言支持沒有樣板代碼的返回值緩存?
- 存在的輸入和輸出之間的靜態一個一對一映射,
- 創建輸出對象的成本是比較高的,並且
- 該方法被重複調用相同的輸入
...需要緩存結果值。
在我的代碼下面的結果值緩存模式被重複了很多(在Java中的僞代碼,但問題是語言無關):
private static Map<Input, Output> fooResultMap = new HashMap<Input, Output>();
public getFoo(Input input) {
if (fooResultMap.get(input) != null) {
return fooResultMap.get(input);
}
Output output = null;
// Some code to obtain the object since we don't have it in the cache.
fooResultMap.put(input, output);
return output;
}
重複這一結構中的所有時間明顯違反乾的原則。
理想情況下,我想上面的代碼將減少到以下幾點:
@CacheResult
public getFoo(Input input) {
Output output = null;
// Some code to obtain the object since we don't have it in the cache.
return output;
}
凡理論CacheResult註釋將採取目前,我正在做手工緩存的照顧。
這種類型的緩存的總稱是「memoization」。
我正在尋找的確切功能的一個很好的例子是Perl core module "Memoize"。
在哪種語言中存在這種類似Memoize的緩存解決方案(在語言級別還是庫級別)?特別是 - 這種解決方案是否存在於任何主流平臺,例如Java或.NET?
(注意,所示代碼泄漏,而不是線程安全的) – 2009-05-21 11:14:00
這是運行Web上下文,你每次都必須從數據庫中獲得Foo的價值? – 2009-05-21 11:22:11
@克里斯:不,問題是上下文無關的。 – knorv 2009-05-21 11:27:51