2016-10-31 7 views
0
public static void CacheUncachedMessageIDs(List<int> messageIDs) 
{ 
    var uncachedRecordIDs = LocalCacheController.GetUncachedRecordIDs<PrivateMessage>(messageIDs); 
    if (!uncachedRecordIDs.Any()) return; 

    using (var db = new DBContext()) 
    { 
     ..... 
    } 
} 

上記の方法は、プロジェクト全体を通して定期的に繰り返されます(異なるジェネリックが渡された場合を除く)。私はif (!uncachedRecordIDs.Any()) return;行の繰り返しの使用を避けるために探しています。親機能の中断?

つまり、LocalCacheController.GetUncachedRecordIDsCacheUncachedMessageIDsメソッドを返すことができますか?

これは、新しいデータコンテキストが必要でない限り作成されないことを保証します(親メソッドで戻り行を誤って追加することを忘れることを防ぐ)。

答えて

1

親メソッドからネストされたメソッドを返すことはできません。 GetUncachedRecordIDsの中に未処理のExceptionを入れることができますが、それはそのトリックを行いますが、これはとは考えられないので、とは思われません。また、非常に遅いです。

もう1つ提案されていませんメカニックはgotoのマジックを使用します。 gotoは、プログラム実行フローで予期しない動作が発生するため、混乱を招くこともあります。

お客様のベスト・ベットは、bool HasUncachedRecordIDsフィールドのResultオブジェクトを戻して確認することです。それが通過すれば、それから戻ります。このソリューションは、メソッド呼び出しの問題を解決します。この場合、Any()です。

var uncachedRecordIDsResult = LocalCacheController.GetUncachedRecordIDs<PrivateMessage>(messageIDs); 
if(uncachedRecordIDsResult.HasUncachedRecordIDs) return; 

言語でのこの機能の不足のための私の推論はどの機能、基本的GetUncachedRecordIDsを呼び出すと、予想外に警告せずに、その親関数を終了することになるということです。また、両方の関数を密接に絡み合わせ、最良のプログラミング実践は、クラスとメソッドの緩やかな結合を伴います。

+0

おかげで、あなたは正しいとオブジェクトを返すことは移動するための方法だと思います! –

+0

もしあなたが結果に何かをチェックすることに頼っているのであれば、私はコードを現状のままにしておきます。言い換えれば、 'if(uncachedRecordIDs.Any())return;'に対して 'if(uncachedRecordIDs.ShouldReturn)return;と' if(uncachedRecordIDs.Any())return;を実行することで、実際にコードを保存していないことになります。 –

+0

明確にする:現在のコードは、「キャッシュされていないレコードがない場合は返す」と私に読んでいます。 –

0

Actionは、必要に応じて呼び出すGetUncachedRecordIDsメソッドに渡すことができます。アイデアのラフスケッチ:

// LocalCacheController 
void GetUncachedRecordIDs<T>(List<int> messageIDs, Action<List<int>> action) 
{ 
    // ... 
    if (!cached) { 
     action(recordIds); 
    } 
} 

// ... 

public static void CacheUncachedMessageIDs(List<int> messageIDs) 
{ 
    LocalCacheController.GetUncachedRecordIDs<PrivateMessage>(messageIDs, uncachedRecordIDs => { 
     using (var db = new DBContext()) 
     { 
      // ... 
     } 
    });  

}

関連する問題