編集:警告-次の手法は、見栄えを良くするために隠れた依存関係を作成するため、一般的に悪い考えと見なされていることに気付きました。
最近、StackTraceを使用して、メソッドの呼び出し元に関する情報を推測できることを発見しました。
これにより、一見「クールな」APIを作成できます。これにより、明示的なパラメーターをわざわざ渡すことなくメソッドを呼び出すだけで、メソッドはStackTraceに基づいて何をすべきかを判断します。
これは悪いことですか?もしそうなら、なぜですか?
例:
public class Cache {
public Object CheckCache()
{
Object valueToReturn = null;
string key = GenerateCacheKeyFromMethodPrototype(new StackTrace().GetFrame(1).GetMethod()); //frame 1 contains caller
if(key is in cache) valueToReturn = itemFromCache;
return valueToReturn;
}
}
public class Foo {
private static Cache cache = new Cache();
public Blah MethodFoo(param1, param2...)
{
Blah valueToReturn = cache.CheckCache(); //seems cool!
if(valueToReturn == null)
{
valueToReturn = result of some calculation;
//populate cache
}
return valueToReturn;
}
}
上記の擬似コードにエラーがあると確信していますが、私のドリフトが発生します。
編集:みんなの反応に感謝します。