|
From: <me...@st...> - 2005-08-15 16:30:31
|
>>>>> "A" == A Pagaltzis <pag...@gm...> writes:
A> could you please give an answer to these questions?
See, that's the problem when I try to take a weekend off, like normal
people. :)
First, I hate ::Simple. On any module. If the interface was so
complicated that it needed a "simple" thing that doesn't describe how
it's simpler, then the designer failed.
So let's look at the problem:
Every hit requires four steps, not three. There's a bit of a misdesign,
which is affecting the proper refactoring:
1) map incoming to state
2) map state to a respond class
3) invoke responder, getting render class
4) invoke renderer
Right now CGIP->dispatch does the first two. The difference between
Hidden Fields and Pathinfo is only in step 1 though.
So, I propose a refactoring of CGIP so that CGIP->dispatch calls
CGIP->get_state, taking the results of that to call CGIP->get_class,
which then is returned as the result of CGIP->dispatch. This keeps
the top-level unchanged, and permits backward compatibility.
Then, I wanna refactor the current Hidden into its pieces:
a mixin for ->get_state (call it CGI::Prototype::State::Hidden)
- uses the hidden param to get a state name, or a default state
a mixin for ->get_class (call it CGI::Prototype::Mapper::Prefix)
- uses the state name with a prefix and does an autoload
a mixin for ->render_enter and ->engine_params (call it CGI::Prototype::Render::TT::Wrapper)
- uses a TT search path = @INC and defines a wrapper
And release those parts all as separate distros, although maybe just
bundled initially. The current "CGI::Prototype::Hidden" would then
be backward compatible, again.
The mixins would be added individually as:
package My::App;
use base CGI::Prototype;
__PACKAGE__->reflect->addSlots(
'*' => 'CGI::Prototype::State::Hidden',
'*' => 'CGI::Prototype::Mapper::Prefix',
'*' => 'CGI::Prototype::Render::TTWrapper',
);
## other subs for My::App;
1;
And in fact, the current CGI::Prototype::Hidden would be a pm with
just this in it, to be backward compatible.
Other mixins:
CGI::Prototype::State::Pathinfo (yours)
CGI::Prototype::Mapper::StrictLookup (yours)
CGI::Prototype::Render::HTMLTemplate::* (for people that prefer H::T)
I'm not attached to the ::Mapper::* name. Just making these up as I go.
How does this grab ya?
--
Randal L. Schwartz - Stonehenge Consulting Services, Inc. - +1 503 777 0095
<me...@st...> <URL:http://www.stonehenge.com/merlyn/>
Perl/Unix/security consulting, Technical writing, Comedy, etc. etc.
See PerlTraining.Stonehenge.com for onsite and open-enrollment Perl training!
|