2014-06-11 2 views
0

Я создаю клиентское серверное приложение, используя форму окна. Вся конфигурация приложения сохраняется в таблице базы данных с именем «Конфигурация», и есть интерфейс для изменения ее значения. В транзакции используются некоторые записи в таблице конфигурации, например «Активация журнала». Если это значение Активации журнала истинно, то при сохранении транзакции он создаст файл журнала.Глобальная конфигурация в Windows Forms

Итак, каждый раз, когда я сохранял транзакцию, я всегда читал конфигурацию активации журнала для базы данных, чтобы получить ее значение. В моем случае я не только читаю 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 минут, чтобы не мешать запущенным транзакциям. –

Смежные вопросы