Mercurial > pub > Impl
diff Lib/IMPL/Config.pm @ 73:2f31ecabe9ea
doc
security
author | wizard |
---|---|
date | Mon, 29 Mar 2010 06:56:05 +0400 |
parents | 76b878ad6596 |
children | 76515373dac0 |
line wrap: on
line diff
--- a/Lib/IMPL/Config.pm Fri Mar 26 16:26:31 2010 +0300 +++ b/Lib/IMPL/Config.pm Mon Mar 29 06:56:05 2010 +0400 @@ -118,28 +118,34 @@ =pod -=h1 SYNOPSIS +=head1 NAME + +C<IMPL::Config> - базовый класс для настраиваемого приложения. + +=head1 SYNOPSIS -package App::Config -use base qw(IMPL::Config) +=begin code + +# define application + +package MyApp; +use base qw(IMPL::Config); use IMPL::Class::Property; use IMPL::Config::Class; BEGIN { public property SimpleString => prop_all; - public property MyClass => prop_all; public property DataSource => prop_all; } sub CTOR { my $this = shift; - - $this->MyClass(new IMPL::Config::Class(Type => 'MyClass'')) unless $this->MyClass; + $this->DataSource( new IMPL::Config::Activator( - type => 'MyDataSource', - args=>{ + factory => 'MyDataSource', + parameters=>{ host => 'localhost', user => 'dbuser' } @@ -147,37 +153,85 @@ ) unless $this->Exists('DataSource'); } -# in some script +# using application object -my $app = spawn App::Config('default.xml'); +my $app = spawn MyApp('default.xml'); $app->Run(); +=end code + +Ниже приведен пример файла C<default.xml> содержащего настройки приложения + +=begin code xml + +<app type='MyApp'> + <SimpleString>The application</SimpleString> + <DataSource type='IMPL::Config::Activator'> + <factory>MyDataSourceClass</factory> + <parameters type='HASH'> + <host>localhost</host> + <user>dbuser</user> + </parameters> + </DataSource> +</app> + +=end code xml + =head1 DESCRIPTION -Позволяет сохранить/загрузить конфигурацию. Также все классы конфигурации -должны наследоваться от данного класса, и все Public свойства будут -автоматически сохраняться и восстанавливаться. +C<[Serializable]> + +C<[Autofill]> + +C<use base IMPL::Object::Accessor> + +Базовый класс для приложений. Использует подход, что приложение +является объектом, состояние которого предтавляет собой конфигурацию, +а методы - логику. + +Данный класс реализует функционал десериализации (и сериализации) экземпляра +приложения из XML документа. Для этого используется механизм C<IMPL::Serialization>. +При этом используются опции C<IMPL::Serialization::XmlFormatter> C<IdentOutput> и +C<SkipWhitespace> для записи документа в легко читаемом виде. + +Поскольку в результате восстановления приложения восстанавливаются все элементы +из файла конфигурации, то это может потребовать значительных ресурсов для +создания частей, которые могут никогда не понадобиться. Например, не требуется инициализация +источника данных для передачи пользователю статических данных, сохраненных на диске. + +Для решения этой проблемы используются специальные объекты C<IMPL::Config::Activator>. + +Если у приложения описано свойство, в котором хранится C<IMPL::Config::Activator>, то +при первом обращении к такому свойству, будет создан объект вызовом метода +C<< IMPL::Config::Activator->activate() >> и возвращен как значение этого свойства. +Таким образом реализуется прозрачная отложенная активация объектов, что позволяет +экономить ресурсы. =head1 MEMBERS =over -=item C<< IMPL::Config->LoadXMLFile($fileName) >> +=item C<[static] LoadXMLFile($fileName) > -Создает из XML файла экземпляр приложения +Создает из XML файла C<$fileName> экземпляр приложения -=item C<< $instance->SaveXMLFile($fileName) >> +=item C<SaveXMLFile($fileName)> -Сохраняет приложение в файл +Сохраняет приложение в файл C<$fileName> + +=item C<[get] xml > -=item C<< xml >> +Сохраняет конфигурацию приложения в XML строку. -Сохраняет конфигурацию приложения в XML строку +=item C<[static,operator] spawn($file)> -=item C<< IMPL::Config->spawn($file) >> +Синоним для C<LoadXMLFile>, предполагается использование как оператора. -Синоним для C<LoadXMLFile> +=item C<rawGet($propname,...)> + +Метод для получения значений свойств приложения. Данный метод позволяет избежать +использование активации объектов через C<IMPL::Config::Activator>. =back