存储预定义对象

时间:2012-08-06 18:55:35

标签: c# asp.net oop c#-4.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

3 个答案:

答案 0 :(得分: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访问器并定义一个公共setter,这样你就可以更改活动配置。

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;

优点是您可以创建具有预定义值的实例,例如,在单元测试中使用。

答案 1 :(得分:0)

这与面向对象的设计模式(Prototype)相似。由于您正在使用C#,您可能希望让Credit对象实现ICloneable接口,并返回您已定义的原型对象的克隆以填充信用条目。

答案 2 :(得分:0)

这似乎是抽象更适合的场景。

根据实现的不同,我会做这样的事情:

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

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

Credit credit = new InvitedRegistrationGift();