2012-08-06 52 views
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 
+0

我說這很奇怪。我不明白。重點是什麼?爲什麼不簡單地創建一個InvitedRegistrationGift的實例? – devundef 2012-08-06 19:01:54

+0

的意圖是隻在一個地方存儲被邀請的註冊禮品,並且在將來每當我需要改變時,讓我們說一下,我可以在一個地方做到這一點。 – 2012-08-06 19:06:15

+0

但你只有一個禮物爲整個asp.net應用程序? – devundef 2012-08-06 19:07:53

回答

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; 

的好處是,你可以創建與預定義值情況下使用,例如,在單元測試。

0

這種感覺與面向對象的設計模式Prototype足夠相似。由於您使用的是C#,因此您可能希望讓您的對象實現接口並返回您定義的原型對象的克隆以填充信用條目。

+0

我會傾向於因爲它看起來好像他需要強制引用值,這對於基於接口的繼承是不可能的。 – Wesley 2012-08-06 22:15:13

0

這似乎是一種抽象更適合的場景。

取決於多種實現方式,我會做這樣的事情:

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

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

Credit credit = new InvitedRegistrationGift(); 
相關問題