同じメソッドを共有する2つのクラスがあり、要件に応じてコードでそれらを切り替えたいと思います。以下の例を見ると、コードの同じ部分が重複していることがわかります。CacheFileクラスとCacheMemoryクラスは同じです。このコードを縮小して、CacheFileクラスとCacheMemoryクラスを切り替えることができると確信しています。
if (_cacheLocation == CacheLocation.File)
{
if (!CacheFile.Get(key, out value))
{
// Do lookup based on caller's logic.
context.Proceed();
value = context.ReturnValue;
CacheFile.Add(value, key, _cacheType, _expiry);
}
}
if (_cacheLocation == CacheLocation.Memory)
{
if (!CacheMemory.Get(key, out value))
{
// Do lookup based on caller's logic.
context.Proceed();
value = context.ReturnValue;
CacheMemory.Add(value, key, _cacheType, _expiry);
}
}