2014-06-11 68 views
0

我使用Windows窗體創建客戶機服務器應用程序。所有應用程序配置都保存在名爲Configuration的數據庫表中,並且有用於更改其值的界面。在配置表中有一些記錄用於事務處理,例如「日誌激活」。如果Log Activation的這個值爲true,那麼當保存一個事務時它將創建一個日誌文件。Windows窗體中的全局配置

所以,當我每次保存一個事務時,我總是將日誌激活配置讀取到數據庫以獲取它的值。在我的情況下,我不僅讀取1個配置,而且還可以讀取1個或更多配置。我擔心會有很多數據庫往返行程來獲取每個配置值,這在客戶端 - 服務器體系結構中不是很好的設計。

然後我嘗試使用設置文件,但這種方法不適合我的應用程序,因爲我使用Windows Form開發客戶端 - 服務器應用程序。每次我更新設置文件中的值時,它只會在該計算機中受到影響,其他則不會。

那麼解決這個問題的最佳解決方案是什麼,而不是直接讀到每個事務中的數據庫?

回答

1

這實際上取決於你的配置機制應該如何工作。是否應當在所有場合使用當前配置值或在重新啓動應用程序後檢測配置更改是否足夠?

在第一種情況下,您需要在需要之前閱讀所需的值,就像現在一樣。

在第二種情況下,創建一個公共靜態類,每個設置具有一個成員並且能夠設置新值並在應用程序啓動時讀取所有值。正如我所說的,缺點是在所有客戶端重新啓動之前不會應用設置。

實例類後者:

public static final class Configuration 
{ 
    private static string m_setting1; 
    private static bool m_setting2; 

    static Configuration() 
    { 
     // Read all settings 
     ... 
    } 

    public static string Setting1 
    { 
     get { return m_setting1; } 
     set 
     { 
      if (!m_setting1.Equals(value)) 
      { 
       m_setting1 = value; 
       StoreSettings(); 
      } 
     } 
    } 

    public static bool Setting2 
    { 
     get { rteurn m_setting2; } 
     set 
     { 
      if (!m_setting2 == value) 
      { 
       m_setting2 = value; 
       StoreSettings(); 
      } 
     } 
    } 
+0

我喜歡你的榜樣,是幹什麼用的StoreSettings?關於缺點,你的意思是說,在客戶端打開的應用程序應該重新打開?有沒有什麼技巧可以使這變得更靈活,因爲有很多客戶端,這將是我額外的工作來通知並確保所有客戶端重新啓動 – Willy

+0

'StoreSettings'將是您實現的一種方法,用於將設置保存到數據庫中。我的缺點是,如果你只在應用程序啓動時纔讀取設置,當然無法知道設置是否已經改變。在不重新啓動客戶端的情況下傳播新設置的一種方法是讓'Configuration'類以給定的時間間隔重新讀取設置,例如每隔15分鐘以不妨礙運行事務的方式。 –