Mercurial > pub > Impl
comparison Lib/IMPL/Web/Application/ControllerUnit.pm @ 111:6c25ea91c985
ControllerUnit concept
author | wizard |
---|---|
date | Tue, 18 May 2010 01:33:37 +0400 |
parents | c13a215508ca |
children | 0ed8e2541b1c |
comparison
equal
deleted
inserted
replaced
110:c13a215508ca | 111:6c25ea91c985 |
---|---|
6 | 6 |
7 BEGIN { | 7 BEGIN { |
8 public property action => prop_get | owner_set; | 8 public property action => prop_get | owner_set; |
9 public property application => prop_get | owner_set; | 9 public property application => prop_get | owner_set; |
10 public property query => prop_get | owner_set; | 10 public property query => prop_get | owner_set; |
11 public property formData => prop_get | owner_set; | |
12 public property formSchema => prop_get | owner_set; | |
13 public property formErrors => prop_get | owner_set; | |
11 } | 14 } |
12 | 15 |
13 sub CTOR { | 16 sub CTOR { |
14 my ($this,$action) = @_; | 17 my ($this,$action) = @_; |
15 | 18 |
26 $unit->$method(); | 29 $unit->$method(); |
27 } else { | 30 } else { |
28 die new IMPL::InvalidOperationException("Invalid method call",$self,$method); | 31 die new IMPL::InvalidOperationException("Invalid method call",$self,$method); |
29 } | 32 } |
30 } | 33 } |
34 | |
35 1; | |
36 | |
37 __END__ | |
38 | |
39 =pod | |
40 | |
41 =head1 NAME | |
42 | |
43 C<IMPL::Web::Application::ControllerUnit> - базовый класс для обработчика транзакций в модели контроллера. | |
44 | |
45 =head1 DESCRIPTION | |
46 | |
47 Классы, наследуемые от данного класса используются для выполнения транзакций, которые приходят | |
48 через контроллер запросов. Как правило один класс представляет собой пакет транзакций, каждая | |
49 из которых является независимой от другой. | |
50 | |
51 Перед выполнением транзакции создается экземпляр объекта, в рамках которого будет выполнена транзакция. | |
52 Для этого вызывается метод C<InvokeAction($method,$action)>, который создает/восстанавливает контекст | |
53 транзакции. | |
54 | |
55 Транзакции на данный момент делятся на простые и формы. | |
56 | |
57 =head2 Простые транзакции | |
58 | |
59 Простые транзакции получаю только запрос, без предварительной обработки, и возвращенный результат напрямую | |
60 передается пользователю. | |
61 | |
62 =head2 Формы | |
63 | |
64 При использовании форм запрос предварительно обрабатывается, для получения DOM документа с данными формы. | |
65 Для постороенния DOM документа используется схема. При этом становятся доступны дополнительные свойства | |
66 C<formData>, C<formSchema>, C<formErrors>. | |
67 | |
68 Результат выполнения транзакции не возвращается напрямую пользователю, а включается в общий ответ, который | |
69 выглядит следующим образом | |
70 | |
71 =begin code | |
72 | |
73 { | |
74 state => '{ new | correct | invalid }', | |
75 result => $transactionResult, | |
76 formData => $formDOM, | |
77 formSchema => $formSchema, | |
78 formErrors => @errors | |
79 } | |
80 | |
81 =end code | |
82 | |
83 =over | |
84 | |
85 =item C<state> | |
86 | |
87 Состояние верификации формы. | |
88 | |
89 =over | |
90 | |
91 =item C<new> | |
92 | |
93 Первоначальное содержимое формы, оно может быть некорректным, но это нормально. | |
94 В данном состоянии транзакция обычно не выполняется. | |
95 | |
96 =item C<correct> | |
97 | |
98 Данные формы корректны, транзакция выполнена, и ее результат доступен через поле C<result> | |
99 | |
100 =item C<invalid> | |
101 | |
102 Содержимое формы не прошло верификацию, ошибки доступны через поле C<formErrors>. Транзакция | |
103 не выполнялась. | |
104 | |
105 =back | |
106 | |
107 =item C<result> | |
108 | |
109 Результат выполнения транзакции, если конечно таковая выполнялась. | |
110 | |
111 =item C<formData> | |
112 | |
113 ДОМ документ с данными формами. Документ существует всегда, не зависимо от его корректности, | |
114 может быть использован для построения формы, уже заполненную параметрами. | |
115 | |
116 =item C<formSchema> | |
117 | |
118 Схема данных формы, может использоваться для построения динамических форм. | |
119 | |
120 =item C<formErrors> | |
121 | |
122 Ошибки верификации данных, если таковые были | |
123 | |
124 =back | |
125 | |
126 =head1 MEMBERS | |
127 | |
128 =over | |
129 | |
130 =item C<[get] application> | |
131 | |
132 =item C<[get] query> | |
133 | |
134 =item C<[get] response> | |
135 | |
136 =item C<[get] formData> | |
137 | |
138 =item C<[get] formSchema> | |
139 | |
140 =item C<[get] formErrors> | |
141 | |
142 =item C<InvokeAction($method,$action)> | |
143 | |
144 Конструирует контекст выполнения транзакции, может быть переопределен для конструирования контекста по | |
145 своимправилам. | |
146 | |
147 =back | |
148 | |
149 =head1 EXAMPLE | |
150 | |
151 =begin code | |
152 | |
153 package MyBooksUnit; | |
154 use strict; | |
155 use base qw(IMPL::Web::Application::ControllerUnit); | |
156 | |
157 __PACKAGE__->PassThroughArgs; | |
158 | |
159 __PACKAGE__->transactions(qw( | |
160 find | |
161 info | |
162 )); | |
163 __PACKAGE__->forms( | |
164 create => 'books.create.xml' | |
165 ); | |
166 | |
167 sub find { | |
168 my ($this) = @_; | |
169 | |
170 return $this->application->dataSource->resultset('Books')->find({author => $this->query->param('author')}); | |
171 } | |
172 | |
173 sub info { | |
174 my ($this) = @_; | |
175 | |
176 return $this->application->dataSource->resultset('Books')->find({id => $this->query->param('id')}); | |
177 } | |
178 | |
179 sub create { | |
180 my ($this) = @_; | |
181 | |
182 my %book = map { | |
183 $_ => $this->formData->selectSingleNode($_)->nodeValue | |
184 } qw(author_id title year ISBN); | |
185 | |
186 return $this->application->datasource->resultset('Books')->create(\%book); | |
187 } | |
188 | |
189 =end code | |
190 | |
191 =cut |