Я предпочитаю создать интерфейс в моем модуле глобальных интерфейсов:
type
IConfiguration = interface
['{95F70366-19D4-4B45-AEB9-8E1B74697AEA}']
procedure SetConfigValue(const Section, Name,Value:String);
function GetConfigValue(const Section, Name:string):string;
end;
Затем этот интерфейс отображается в моей основной форме:
type
tMainForm = class(TForm,IConfiguration)
...
end;
Большую часть времени фактическая реализация находится не в основной форме, это просто заполнитель, и я использую ключевое слово реализации, чтобы перенаправить интерфейс на другой объект, принадлежащий основной форме. Дело в том, что ответственность за настройку делегирована. Каждому устройству все равно, хранится ли конфигурация в таблице, ini-файле, xml-файле или даже в реестре. Что это позволяет мне делать в ЛЮБОМ модуле, который использует модуль глобальных интерфейсов, - это делать вызов, подобный следующему:
var
Config : IConfiguration;
Value : string;
begin
if Supports(Application.MainForm,IConfiguration,Config) then
value := Config.GetConfiguration('section','name');
...
end;
Все, что нужно, - это добавить FORMS и мой модуль глобальных интерфейсов к модулю, над которым я работаю. И поскольку он не ИСПОЛЬЗУЕТ основную форму, если я позже решу повторно использовать ее для другого проекта, мне не придется вносить никаких дальнейших изменений ... она просто работает, даже если схема хранения конфигурации полностью отличается.
Я обычно предпочитаю создать таблицу (если я имею дело с приложением базы данных) или XML-файл. Если это многопользовательская база данных, я создам две таблицы. Один для глобальной конфигурации, а другой для пользовательской конфигурации.
person
skamradt
schedule
18.08.2009