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