Mercurial > pub > Impl
comparison Lib/IMPL/Config.pm @ 73:2f31ecabe9ea
doc
security
| author | wizard |
|---|---|
| date | Mon, 29 Mar 2010 06:56:05 +0400 |
| parents | 76b878ad6596 |
| children | 76515373dac0 |
comparison
equal
deleted
inserted
replaced
| 72:eac47fa4f262 | 73:2f31ecabe9ea |
|---|---|
| 116 1; | 116 1; |
| 117 __END__ | 117 __END__ |
| 118 | 118 |
| 119 =pod | 119 =pod |
| 120 | 120 |
| 121 =h1 SYNOPSIS | 121 =head1 NAME |
| 122 | 122 |
| 123 package App::Config | 123 C<IMPL::Config> - базовый класс для настраиваемого приложения. |
| 124 use base qw(IMPL::Config) | 124 |
| 125 =head1 SYNOPSIS | |
| 126 | |
| 127 =begin code | |
| 128 | |
| 129 # define application | |
| 130 | |
| 131 package MyApp; | |
| 132 use base qw(IMPL::Config); | |
| 125 | 133 |
| 126 use IMPL::Class::Property; | 134 use IMPL::Class::Property; |
| 127 use IMPL::Config::Class; | 135 use IMPL::Config::Class; |
| 128 | 136 |
| 129 BEGIN { | 137 BEGIN { |
| 130 public property SimpleString => prop_all; | 138 public property SimpleString => prop_all; |
| 131 public property MyClass => prop_all; | |
| 132 public property DataSource => prop_all; | 139 public property DataSource => prop_all; |
| 133 } | 140 } |
| 134 | 141 |
| 135 sub CTOR { | 142 sub CTOR { |
| 136 my $this = shift; | 143 my $this = shift; |
| 137 | 144 |
| 138 $this->MyClass(new IMPL::Config::Class(Type => 'MyClass'')) unless $this->MyClass; | |
| 139 $this->DataSource( | 145 $this->DataSource( |
| 140 new IMPL::Config::Activator( | 146 new IMPL::Config::Activator( |
| 141 type => 'MyDataSource', | 147 factory => 'MyDataSource', |
| 142 args=>{ | 148 parameters=>{ |
| 143 host => 'localhost', | 149 host => 'localhost', |
| 144 user => 'dbuser' | 150 user => 'dbuser' |
| 145 } | 151 } |
| 146 ) | 152 ) |
| 147 ) unless $this->Exists('DataSource'); | 153 ) unless $this->Exists('DataSource'); |
| 148 } | 154 } |
| 149 | 155 |
| 150 # in some script | 156 # using application object |
| 151 | 157 |
| 152 my $app = spawn App::Config('default.xml'); | 158 my $app = spawn MyApp('default.xml'); |
| 153 | 159 |
| 154 $app->Run(); | 160 $app->Run(); |
| 155 | 161 |
| 162 =end code | |
| 163 | |
| 164 Ниже приведен пример файла C<default.xml> содержащего настройки приложения | |
| 165 | |
| 166 =begin code xml | |
| 167 | |
| 168 <app type='MyApp'> | |
| 169 <SimpleString>The application</SimpleString> | |
| 170 <DataSource type='IMPL::Config::Activator'> | |
| 171 <factory>MyDataSourceClass</factory> | |
| 172 <parameters type='HASH'> | |
| 173 <host>localhost</host> | |
| 174 <user>dbuser</user> | |
| 175 </parameters> | |
| 176 </DataSource> | |
| 177 </app> | |
| 178 | |
| 179 =end code xml | |
| 180 | |
| 156 =head1 DESCRIPTION | 181 =head1 DESCRIPTION |
| 157 | 182 |
| 158 Позволяет сохранить/загрузить конфигурацию. Также все классы конфигурации | 183 C<[Serializable]> |
| 159 должны наследоваться от данного класса, и все Public свойства будут | 184 |
| 160 автоматически сохраняться и восстанавливаться. | 185 C<[Autofill]> |
| 186 | |
| 187 C<use base IMPL::Object::Accessor> | |
| 188 | |
| 189 Базовый класс для приложений. Использует подход, что приложение | |
| 190 является объектом, состояние которого предтавляет собой конфигурацию, | |
| 191 а методы - логику. | |
| 192 | |
| 193 Данный класс реализует функционал десериализации (и сериализации) экземпляра | |
| 194 приложения из XML документа. Для этого используется механизм C<IMPL::Serialization>. | |
| 195 При этом используются опции C<IMPL::Serialization::XmlFormatter> C<IdentOutput> и | |
| 196 C<SkipWhitespace> для записи документа в легко читаемом виде. | |
| 197 | |
| 198 Поскольку в результате восстановления приложения восстанавливаются все элементы | |
| 199 из файла конфигурации, то это может потребовать значительных ресурсов для | |
| 200 создания частей, которые могут никогда не понадобиться. Например, не требуется инициализация | |
| 201 источника данных для передачи пользователю статических данных, сохраненных на диске. | |
| 202 | |
| 203 Для решения этой проблемы используются специальные объекты C<IMPL::Config::Activator>. | |
| 204 | |
| 205 Если у приложения описано свойство, в котором хранится C<IMPL::Config::Activator>, то | |
| 206 при первом обращении к такому свойству, будет создан объект вызовом метода | |
| 207 C<< IMPL::Config::Activator->activate() >> и возвращен как значение этого свойства. | |
| 208 Таким образом реализуется прозрачная отложенная активация объектов, что позволяет | |
| 209 экономить ресурсы. | |
| 161 | 210 |
| 162 =head1 MEMBERS | 211 =head1 MEMBERS |
| 163 | 212 |
| 164 =over | 213 =over |
| 165 | 214 |
| 166 =item C<< IMPL::Config->LoadXMLFile($fileName) >> | 215 =item C<[static] LoadXMLFile($fileName) > |
| 167 | 216 |
| 168 Создает из XML файла экземпляр приложения | 217 Создает из XML файла C<$fileName> экземпляр приложения |
| 169 | 218 |
| 170 =item C<< $instance->SaveXMLFile($fileName) >> | 219 =item C<SaveXMLFile($fileName)> |
| 171 | 220 |
| 172 Сохраняет приложение в файл | 221 Сохраняет приложение в файл C<$fileName> |
| 173 | 222 |
| 174 =item C<< xml >> | 223 =item C<[get] xml > |
| 175 | 224 |
| 176 Сохраняет конфигурацию приложения в XML строку | 225 Сохраняет конфигурацию приложения в XML строку. |
| 177 | 226 |
| 178 =item C<< IMPL::Config->spawn($file) >> | 227 =item C<[static,operator] spawn($file)> |
| 179 | 228 |
| 180 Синоним для C<LoadXMLFile> | 229 Синоним для C<LoadXMLFile>, предполагается использование как оператора. |
| 230 | |
| 231 =item C<rawGet($propname,...)> | |
| 232 | |
| 233 Метод для получения значений свойств приложения. Данный метод позволяет избежать | |
| 234 использование активации объектов через C<IMPL::Config::Activator>. | |
| 181 | 235 |
| 182 =back | 236 =back |
| 183 | 237 |
| 184 =cut | 238 =cut |
