aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Reaction/Manual
diff options
context:
space:
mode:
authoredenc <edenc@03d0b0b2-0e1a-0410-a411-fdb2f4bd65d7>2007-12-20 21:53:19 +0000
committeredenc <edenc@03d0b0b2-0e1a-0410-a411-fdb2f4bd65d7>2007-12-20 21:53:19 +0000
commitdf2804f55eb601702aebb3127f34bfb3c9d94904 (patch)
treed79d5a73f6f474fc50c7e361680324ad4402fe53 /lib/Reaction/Manual
parent7d60a711a42e949fea1f1ccbf9d05f3f7cffd4c3 (diff)
downloadreaction-df2804f55eb601702aebb3127f34bfb3c9d94904.tar.gz
reaction-df2804f55eb601702aebb3127f34bfb3c9d94904.zip
started updating docs
Diffstat (limited to 'lib/Reaction/Manual')
-rw-r--r--lib/Reaction/Manual/Intro.pod127
1 files changed, 127 insertions, 0 deletions
diff --git a/lib/Reaction/Manual/Intro.pod b/lib/Reaction/Manual/Intro.pod
new file mode 100644
index 0000000..523e5e8
--- /dev/null
+++ b/lib/Reaction/Manual/Intro.pod
@@ -0,0 +1,127 @@
+=head1 NAME
+
+Reaction::Manual::Intro - Introduction to Reaction
+
+=head1 INTRODUCTION
+
+Reaction is basically an extended MVC:
+
+=over
+
+=item Domain Model
+
+DBIx::Class::Schema, MyApp::Foo, MyApp::Bar, etc.
+
+=item Interface Model
+
+InterfaceModel::DBIC::Schema, InterfaceModel::Action,
+MyApp::InterfaceModel::Foo classes.
+
+=item Controller
+
+Mediation and navigation.
+
+=item ViewPort
+
+Event handling encapsulation.
+
+=item Widget
+
+View logic.
+
+=item Renderer
+
+MyApp::View:: classes, renders viewports.
+
+=back
+
+=head1 THE REACTION WAY
+
+The idea is you separate your domain model, which encapsulates the domain
+itself from your interface model, which is a model of how a particular app or
+class of apps interact with that domain and provides objects/methods to
+encapsulate the common operations it does.
+
+=head2 Domain Models vs Interface Models
+
+Domain models are expected to drive the application business logic and data.
+All domain models that need to be effectively displayed somehow at the user
+interface (a table, for instance) must interact with an interface model.
+These should provide the common methods needed in order to carry out
+user-generated events.
+
+=head1 SETTING UP A REACTION APPLICATION
+
+Reaction applications are set up just like Catalyst:
+
+ $ catalyst.pl MyApp
+ # output ommited
+ $ cd MyApp
+
+=head2 Models
+
+Reaction provides a reflector component which automagically
+maps a L<DBIx::Class::Schema> into a set of Interface Models which can be used
+by Reaction to build the interface components. If you're not familiar with
+L<DBIx::Class> or don't have a schema handy, now is a good time to go through
+L<DBIx::Class::Manual::Intro> to get a schema set up.
+
+ package MyApp::InterfaceModel::DBIC;
+
+ use base 'Reaction::InterfaceModel::Object';
+ use Reaction::InterfaceModel::Reflector::DBIC;
+
+ my $reflector = Reaction::InterfaceModel::Reflector::DBIC->new;
+
+ $reflector->reflect_schema(
+ model_class => __PACKAGE__,
+ schema_class => 'MyApp::Schema',
+ sources => [qw/Foo Baz/],
+ );
+
+ 1;
+
+=head2 Controllers
+
+Your Reaction application must have a Root controller which inherits from
+C<Reaction::UI::Controller::Root>.
+
+ package MyApp::Controller::Root;
+
+ use warnings;
+ use strict;
+ use base qw/Reaction::UI::Controller::Root/;
+
+ __PACKAGE__->config(
+ view_name => 'Site',
+ window_title => 'My Reaction App',
+ namespace => ''
+ );
+
+ 1;
+
+XX TODO
+
+=head2 View
+
+XX TODO
+
+=head1 SEE ALSO
+
+=over
+
+=item * L<Reaction::Manual::Cookbook>
+
+=item * L<Reaction::Manual::FAQ>
+
+=back
+
+=head1 AUTHORS
+
+See L<Reaction::Class> for authors.
+
+=head1 LICENSE
+
+See L<Reaction::Class> for the license.
+
+=cut