2014-01-16 65 views
0

我有一個C#應用程序,包含一個產品核心和每個客戶項目的不同特例。 我需要一種方法來處理和管理全局常量(在一箇中心點一切),並用以下解決方案上來:在不同的項目中管理常量

在項目的「核心」:

public abstract class Config 
{ 
    //Core values, which are always needed 
    public const string Value1 = "abc"; 
    ... 
} 

在具體項目「SpecialProject1」 (引用核心):

public abstract class SpecialConfig : Config 
{ 
    //additional extra values for this special case 
    public const string Value2 = "xyz"; 
    ... 
} 

這樣我可以從我的核心配置類繼承,避免有人無意中創建我的配置類的一個實例(他們沒有狀態,只是固定值)。

有沒有更好的方法來做到這一點?在這種情況下使用「抽象」有沒有問題?

+0

您是否需要防止人們意外地創建配置類的實例?如果他們做了什麼會造成什麼危害?就個人而言,我總是希望不用編譯代碼中的配置設置,以避免爲了更改配置設置而進行新的構建。有一個加載XML配置文件或從數據庫加載的類。那麼你只需要爲每個客戶提供一個標識符,以便讓你獲得正確的配置。 – Chris

+1

我不會做任何大傷害,但是沒有必要創建一個實例。大部分配置值都來自xml文件,但有些東西只是......好吧,常量。 – HectorLector

回答

2

一個抽象類的Instread使用靜態類:

public static class Config 
{ 
    //Core values, which are always needed 
    public const string Value1 = "abc"; 
    ... 
} 

,並請參閱您的變量Config.Value1而不是從類繼承。由於C#只允許您從一個基類繼承,因此強制使用不必要地繼承它並不是一個好主意。

此外,靜態類永遠不會實例化,因此您不必擔心創建實例的人。

在「SpecialProject1」中有一個只與該項目的配置相關的配置類,以便保持核心配置和項目配置的獨立性。

+1

我第一次遇到這種情況,但後來我需要編寫這樣的代碼:SpecialMethode(CoreConfig.Value1,SpecialConfig.Value2)。我只想爲每個包含一切的項目建立一個「課程」。 – HectorLector

+0

@HectorLector - 夠公平的。只是根據我的經驗,把配置分割成邏輯域比將它們集合在一起更好。通過這種方式,用戶可以清楚地瞭解屬於特定域的設置。 – Sean

+0

你有一點,我會考慮。謝謝你的幫助。否則,你是否發現我的「抽象」方法存在任何明顯的問題? – HectorLector

相關問題