0

我使用嵌套在静态类中的预定义对象将对象信息存储在单个位置,后来我在一些逻辑之后使用它们来使用预定义对象的属性填充普通对象。

你会怎么说这种方法很好,或者我可以通过其他一些有效和更好的方法来达到同样的效果?

//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

这感觉与称为Prototype的面向对象设计模式非常相似。由于您使用的是 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 回答