2011-03-06 38 views
3

目前在我的個人網站我正在建設我正在使用全局靜態配置類來保存一切可配置,我可能需要改變這是半全局的。所以現在它看起來像這樣:全球配置類是一件壞事嗎?

public static class Config 
{ 
    public static string ConnectionString = "mongodb://localhost"; 
    //more configuration options.. 
    public static MongoDB.Driver.MongoDatabase GetDB(){ 
     MongoServer server = MongoServer.Create(Config.ConnectionString); 
     MongoDatabase db = server.GetDatabase(Config.Database); 
     return db; 
    } 
    public static Markdown GetMarkdown(){ 
     var options=new MarkdownOptions(){ 
      AutoHyperlink=true, 
      AutoNewlines=false, 
      EmptyElementSuffix=" />", 
      LinkEmails=false, 
      StrictBoldItalic=true 
     }; 
     var m=new Markdown(options); 
     return m; 

    } 
} 

是使用像這樣的全局配置類某種反模式?另外,我更喜歡我的連接字符串在web.config之外。我喜歡我的web.config儘可能最小。

回答

2

那麼3個成員只有1個是真的配置,另外兩個真的是實用。

在編譯代碼中進行配置對於維護這些配置是否需要更改是一件非常痛苦的事情,因爲它需要重建,這實際上是配置文件的原因。

+0

那麼,從技術上講,GetMarkdown有一些隱式配置。 – Earlz 2011-03-06 03:37:17

2

我做的事情與此類似,但不適用於連接字符串等設置。如果連接字符串需要更改,則需要更新並重建項目。如果您將連接字符串存儲在web.config中,則可以通過簡單的更新立即使用新設置(不重新編譯)。

+0

在我的情況下,我的網站很小並且構建起來很快,我重建它/上傳它的方式比我更改連接字符串更頻繁。想象一下其他的東西,比如Markdown配置。 – Earlz 2011-03-06 03:32:01

+0

這是一個權衡。對我來說,我不明白爲什麼你不想在web.config中使用連接字符串。我發現工作得很好。如果出於任何原因,這對您不起作用,並且您明白硬編碼的缺點,那麼您的來源就是您的選擇。 – 2011-03-06 03:34:21

1

Earlz,

關於你提到的第二個問題,你可以做這樣的事情,沒有必要在web.config中的所有節點或CONFIGS。你可以有一個單獨的配置文件,並指出,在web.config文件中,如下

<connectionStrings configSource="config\yourpath\connectionStrings.config"/> 

關於第一個問題,寫一個獲取值的常用方法。加載所有的值一個常數文件,寫一個輔助類來獲取這些值

1

的反模式是,你必須GetMarkdownConnectionString一起在同一個班,因爲它們都是靜態的,但他們真的沒有任何功能關係GetMarkdownGetDB看起來像工廠方法他們應該可能在他們自己的類。

Single Responsibility Principle表示你應該將可能因相同原因而改變的東西組合在一起。您的數據庫連接和降價配置不可能同時更改或出於同樣的原因。

0

我們將配置設置移至數據庫。從開發移植到質量檢查時,可以更輕鬆地進行生產。 The blog entry is here.

與此相關的是,我們將連接字符串放在WebEnvironment.config中。所以現在我們可以用web.config更改來提升我們的代碼,而不用擔心連接字符串。 That blog post is here.