存储预定义对象

本文关键字:对象 预定义 存储 | 更新日期: 2024-11-06 14:29:29

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

你会说这种方法很好,或者我可以通过其他一些有效和更好的方法实现同样的目的?

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

存储预定义对象

使用静态类不会带来重大问题,但是在这种情况下,单例模式可能更适合。

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;

其变体不是实现单例模式,而是保留 .当前访问器并定义公共资源库,以便您可以更改活动配置。

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;

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

这感觉与称为原型的面向对象设计模式非常相似。由于使用的是 C#,因此可能需要让 Credit 对象实现 ICloneable 接口,并返回已定义的原型对象的克隆,以填充信用条目。

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

根据实现的多样性,我会做这样的事情:

abstract class Credit
{
   protected int Token; 
   protected int Dollar;
}
class InvitedRegistrationGift : Credit
{
   public override int Token
   {
       get 
       {
           return 5;
       }
   }
}
Credit credit = new InvitedRegistrationGift();