typo was messing with clearers
[catagits/Reaction.git] / lib / Reaction / Manual / Intro.pod
1 =head1 NAME
2
3 Reaction::Manual::Intro - Introduction to Reaction
4
5 =head1 INTRODUCTION
6
7 Reaction is basically an extended MVC:
8
9 =over
10
11 =item Domain Model 
12
13 DBIx::Class::Schema, MyApp::Foo, MyApp::Bar, etc.
14
15 =item Interface Model 
16
17 InterfaceModel::DBIC::Schema, InterfaceModel::Action,
18 MyApp::InterfaceModel::Foo classes.
19
20 =item Controller 
21
22 Mediation and navigation.
23
24 =item ViewPort
25
26 Event handling encapsulation.
27
28 =item Widget
29
30 View logic.
31
32 =item Renderer 
33
34 MyApp::View:: classes, renders viewports.
35
36 =back
37
38 =head1 THE REACTION WAY
39
40 The idea is you separate your domain model, which encapsulates the domain
41 itself from your interface model, which is a model of how a particular app or
42 class of apps interact with that domain and provides objects/methods to
43 encapsulate the common operations it does.
44
45 =head2 Domain Models vs Interface Models
46
47 Domain models are expected to drive the application business logic and data.
48 All domain models that need to be effectively displayed somehow at the user
49 interface (a table, for instance) must interact with an interface model.
50 These should provide the common methods needed in order to carry out
51 user-generated events.
52
53 =head1 SETTING UP A REACTION APPLICATION
54
55 Reaction applications are set up just like Catalyst:
56
57     $ catalyst.pl MyApp
58     # output ommited
59     $ cd MyApp
60
61 =head2 Models
62
63 Reaction provides a reflector component which automagically
64 maps a L<DBIx::Class::Schema> into a set of Interface Models which can be used
65 by Reaction to build the interface components. If you're not familiar with
66 L<DBIx::Class> or don't have a schema handy, now is a good time to go through
67 L<DBIx::Class::Manual::Intro> to get a schema set up.
68
69     package MyApp::InterfaceModel::DBIC;
70
71     use base 'Reaction::InterfaceModel::Object';
72     use Reaction::InterfaceModel::Reflector::DBIC;
73
74     my $reflector = Reaction::InterfaceModel::Reflector::DBIC->new;
75
76     $reflector->reflect_schema(
77          model_class  => __PACKAGE__,
78          schema_class => 'MyApp::Schema',
79          sources => [qw/Foo Baz/],
80     );
81
82     1;
83
84 =head2 Controllers
85
86 Your Reaction application must have a Root controller which inherits from
87 C<Reaction::UI::Controller::Root>.
88
89     package MyApp::Controller::Root;
90
91     use warnings;
92     use strict;
93     use base qw/Reaction::UI::Controller::Root/;
94
95     __PACKAGE__->config(
96         view_name => 'Site',
97         window_title => 'My Reaction App',
98         namespace => ''
99     );
100
101     1;
102
103 XX TODO
104
105 =head2 View
106
107 XX TODO
108
109 =head1 SEE ALSO
110
111 =over 
112
113 =item * L<Reaction::Manual::Cookbook>
114
115 =item * L<Reaction::Manual::FAQ>
116
117 =back
118
119 =head1 AUTHORS
120
121 See L<Reaction::Class> for authors.
122
123 =head1 LICENSE
124
125 See L<Reaction::Class> for the license.
126
127 =cut