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