0

静的クラス内にネストされた事前定義されたオブジェクトを使用して、オブジェクト情報を 1 か所に格納しています。後で、いくつかのロジックの後でそれらを使用して、通常のオブジェクトに事前定義されたオブジェクトのプロパティを設定しました。

このアプローチは問題ないと思いますか、それとも他の効率的でより良い方法で同じことを達成できると思いますか?

//Example of storing predefined objects

 public static class RegistrationGift
    {
        public class InvitedRegistrationGift
        {
            public const int Token = 5;
            public const int Dollar = 0;

        }
    }

//how it will be used to populate credit entity (conversion)

Credit credit = new Credit();
credit.Token = RegistrationGift.InvitedRegistrationGift.Token;  

// and so on
4

3 に答える 3

1

静的クラスを使用しても大きな問題は発生しませんが、この場合はシングルトン パターンの方が適している可能性があります。

public class RegistrationConfig {
   // private static instance
   private static RegistrationConfig _instance = new RegistrationConfig()

   // private constructor prevents the class from being instantiated from outside
   private RegistrationConfig() { }

   // instance public accessor
   public static RegistrationConfig Current { get { return _instance; } }

   public int InvitationToken { get; set; }
   public int InvitationDollar { get;set; }
}

消費する:

var credit = new Credit();
credit.Token = RegistrationConfig.Current.InvitationToken;

これのバリエーションは、シングルトン パターンを実装するのではなく、.Current アクセサーを保持し、パブリック セッターを定義して、アクティブな構成を変更できるようにすることです。

public class RegistrationConfig {
   // current
   private static RegistrationConfig _current;

   // instance public accessor
   public static RegistrationConfig Current { get { return _current; } }

   // public setter
   public static void SetCurrent(RegistrationConfig current)
   {
       _current = current;
   }

   public int InvitationToken { get; set; }
   public int InvitationDollar { get;set; }
}

次に、アプリの起動時に構成を設定します。

RegistrationConfig.SetCurrent(new RegistrationConfig() { ... });

そして消費します:

credit.Token = RegistrationConfig.Current.InvitationToken;

利点は、たとえば単体テストで使用する定義済みの値を持つインスタンスを作成できることです。

于 2012-08-06T22:13:52.927 に答える
0

これは、プロトタイプとして知られているオブジェクト指向のデザインパターンに十分似ているように感じます。C#を使用しているため、Creditオブジェクトにインターフェイスを実装させICloneable、クレジットエントリに入力するために定義したプロトタイプオブジェクトのクローンを返すことができます。

于 2012-08-06T18:59:24.690 に答える
0

これは、抽象化の方が適しているシナリオのようです。

さまざまな実装に応じて、次のようにします。

abstract class Credit
{
   protected int Token; 
   protected int Dollar;
}

class InvitedRegistrationGift : Credit
{
   public override int Token
   {
       get 
       {
           return 5;
       }
   }
}

Credit credit = new InvitedRegistrationGift();
于 2012-08-06T19:07:30.980 に答える