C# 存储预定义对象
我使用嵌套在静态类中的预定义对象在单个位置存储对象信息,然后在一些逻辑之后使用它们用预定义对象的属性填充普通对象 你认为这种方法很好,或者我可以通过其他更有效、更好的方法实现同样的效果,你会怎么说C# 存储预定义对象,c#,asp.net,oop,c#-4.0,C#,Asp.net,Oop,C# 4.0,我使用嵌套在静态类中的预定义对象在单个位置存储对象信息,然后在一些逻辑之后使用它们用预定义对象的属性填充普通对象 你认为这种方法很好,或者我可以通过其他更有效、更好的方法实现同样的效果,你会怎么说 //Example of storing predefined objects public static class RegistrationGift { public class InvitedRegistrationGift {
//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
这与面向对象的设计模式(称为。由于您使用的是C#,您可能希望让您的
Credit
对象实现iclonable
接口,并返回您定义的原型对象的克隆以填充Credit条目。这似乎是一个更适合抽象的场景
根据实现的不同,我会这样做:
abstract class Credit
{
protected int Token;
protected int Dollar;
}
class InvitedRegistrationGift : Credit
{
public override int Token
{
get
{
return 5;
}
}
}
Credit credit = new InvitedRegistrationGift();
使用静态类不会带来重大问题,但是单例模式可能更适合这种情况
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;
其变体不是实现singleton模式,而是保留.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;
优点是可以使用预定义的值创建实例例如,在单元测试中使用。我说这很奇怪。我不明白。重点是什么?为什么不简单地创建一个invitedRegistrationIFT实例呢?目的是只在一个地方存储invitedRegistrationIFT,将来每当我需要更改(比如令牌)时,我都可以在一个地方进行更改。但是你对整个asp.net应用程序只有一个礼物?是的。好吧,假设我在多个位置使用它,那么我需要去每个位置并更新它。通过使用这种方法,我只需要在一个地方进行更改,好的,那么您使用静态类作为配置存储?假设您的令牌是“xyz”,那么一段时间后它将更改为“cxd”。然后使用invitedRegistrationIFT存储有关令牌的一些配置,但令牌对应用程序本身有效,而对用户无效。。。好吧,好吧……我倾向于抽象,因为看起来他需要强制引用值,这在基于接口的继承中是不可能的。