LoginSignup
1
0

More than 3 years have passed since last update.

キャッシュ化された関連データを返すプロパティのためのヘルパ

Last updated at Posted at 2020-03-18

よくある


class Hoge{
  string HogeCode{get;set;}

  private string __hogeName =null ;
  //名前を取り出す。名前は別テーブルに入ってるのでHogeCodeを元に取得
  string HogeName {
    get{
      if (__hogeName==null) {
         __hogeName = db.GetHogeName(HogeCode) ; // DBから名前取ったりとか
      }
      return __hogeName;
    }
  }

コードが長い割に大したことやってないので毎回書くのがめんどい。

てってれー

    /// <summary>
    /// キャッシュ化された値を格納するディクショナリ
    /// <ul>
    /// <li>キャッシュされていたらキャッシュから値を返す</li>
    /// <li>キャッシュされていなければpresenterを使って値をキャッシュする</li>
    /// </ul>
    /// </summary>
    public class NameDictionary {
        private Dictionary<string, object> dictionary = new Dictionary<string, object>();
        /// <summary>
        /// 値を取得する。
        /// PropertyのGetterやGet**メソッドから使われることを想定
        /// CallerMemberNameが取れないとエラーになるので注意
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="presenter"></param>
        /// <param name="PropertyName"></param>
        /// <returns></returns>
        public T Get<T>(Func<T> presenter,[CallerMemberName] string PropertyName=null) {
            return Get<T>(PropertyName, presenter);
        }

        /// <summary>
        /// 値を取得する。
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="KeyName"></param>
        /// <param name="presenter"></param>
        /// <returns></returns>
        public T Get<T>(string KeyName,Func<T> presenter) {
            if (!dictionary.ContainsKey(KeyName)) {
                dictionary.Add(KeyName, presenter());
            }
            return (T)dictionary[KeyName];
        }
    }

使い方


class Hoge{
  string HogeCode{get;set;}
  private NameDictionary dictionary = new NameDictionary();
  //名前を取り出す。名前は別テーブルに入ってるのでHogeCodeを元に取得
  string HogeName => dictionary.Get<string>(()=> db.GetHogeName(HogeCode) );

短くかけて大変うれしい。

注意

CallerMemberNameが取れないとエラーになるので、適宜 Get<T>(string,Func<T>)を使う。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0