diff Lib/IMPL/Object/Factory.pm @ 67:9f5795a10939

Documentation, minor fixes
author wizard
date Fri, 19 Mar 2010 20:06:12 +0300
parents 259cd3df6e53
children 2f31ecabe9ea
line wrap: on
line diff
--- a/Lib/IMPL/Object/Factory.pm	Thu Mar 18 17:58:33 2010 +0300
+++ b/Lib/IMPL/Object/Factory.pm	Fri Mar 19 20:06:12 2010 +0300
@@ -70,14 +70,6 @@
 
 =begin code
 
-sub ProcessItems {
-	my ($factory,$items);
-	
-	return map $factory->new($_), @$items;
-}
-
-my @users = ProcessItems('MyApp::User',$db->selectUsers);
-
 my $factory = new IMPL::Object::Factory(
 	'MyApp::User',
 	{
@@ -85,13 +77,35 @@
 	}
 );
 
+my $class = 'MyApp::User';
+
+my $user;
+
+$user = $class->new(name => 'nobody'); # will create object MyApp::User
+                                       # and pass parameters (name=>'nobody')
+											
+$user = $factory->new(name => 'root'); # will create object MyApp::User
+                                       # and pass paremeters (isAdmin => 1, name => 'root')
+
 =end code
 
-my @admins = ProcessItems($factory,$db->selectAdmins);
+Или сериализованная форма в XML.
+
+=begin code xml
 
+<factory type="IMPL::Object::Factory">
+	<factory>MyApp::User</factory>,
+	<parameters type="HASH">
+		<isAdmin>1</isAdmin>
+	</parameters>
+</factory>
+
+=end code xml
 
 =head1 DESCRIPTION
 
+C<[Serializable]>
+
 Класс, реализующий фабрику классов.
 
 Фабрика классов это любой объект, который имеет метод C< new > вызов которого приводит к созданию нового
@@ -108,16 +122,56 @@
 
 =over
 
-=item C< factory >
+=item C< CTOR($factory,$parameters) >
+
+Создает новый экземпляр
+
+=over
+
+=item C<$factory>
+
+Либо имя класса, либо другая фабрика.
+
+=item C<$parameters>
+
+Ссылка на параметры для создания объектов, может быть ссылкой на хеш, массив и т.д.
+
+Если является ссылкой на хеш, то при создании объектов данной фабрикой этот хеш
+будет развернут в список и передан параметрами методу C<new>.
+
+Если является ссылкой на массив, то при создании объектов данной фабрикой этот массив
+будет передан в списк и передан параметрами методу C<new>.
+
+Если является любым другим объектом или скаляром, то будет передан параметром методу
+C<new> как есть.
+
+=back
+
+=item C< [get] factory >
 
 Свойство, содержащее фабрику для создание новых объектов текущей фабрикой. Чаще всего оно содержит
 имя класса.
 
-=item C< parameters >
+=item C< [get] parameters >
 
 Свойство, содержит ссылку на параметры для создания объектов, при создании объекта эти параметры будут
 развернуты в список и переданы оператору C< new > фабрике из свойства C< factory >, за ними будут
-следовать параметры непосредственно текущей фабрики. 
+следовать параметры непосредственно текущей фабрики.
+
+=item C<new(@params)>
+
+Создает новый объект, используя свйство C<factory> как фабрику и передавая туда параметры
+из свойства C<parameters> и списка C<@params>. Ниже приведен упрощенный пример, как это происходит.
+
+=begin code
+
+sub new {
+	my ($this,@params) = @_;
+	
+	return $this->factory->new(_as_list($this->parameters), @params);
+}
+
+=end code
 
 =back