> >From: Sir Robert Burbridge <[email protected]> >To: The elegant MVC web framework <[email protected]> >Sent: Mon, 22 November, 2010 17:20:16 >Subject: Re: [Catalyst] Begginer's question about application structure > > I use DBIx::Class with multiple interfaces in the same app; this is the > structure I've found most useful so far: > > ### the lib dir. > lib/ > > ### MyApp stores everything relevant to my app > lib/MyApp > > ### "MyApp::Web" stores the web interface > lib/MyApp/Web > lib/MyApp/Web/Model > lib/MyApp/Web/View > lib/MyApp/Web/Controller > > ### HTML::FormHandler forms that are web-specific. > lib/MyApp/Web/Form > > ### Stores db stuff for DBIx::Class. > lib/MyApp/Schema/ > > ### Normal DBIx::Class schema, results, and resultsets > lib/MyApp/Schema/MyApp > lib/MyApp/Schema/MyApp/Result > lib/MyApp/Schema/MyApp/ResultSet > > ### Schema/Result and Schema/ResultSet contain things like Moose roles > ### that I want to apply to multiple models, but that really only make > ### sense in the context of this application. > lib/MyApp/Schema/Result > lib/MyApp/Schema/ResultSet > > ### A namespace for script based access to the app > lib/MyApp/Script > lib/MyApp/Script/User > lib/MyApp/Script/User/Create.pm > lib/MyApp/Script/Report > lib/MyApp/Script/Report/Documentation.pm > > ### Libs specific to the CLI > lib/MyApp/CLI > > ### Tests > t > > ### Store > t/lib > > A couple of notes: > > The contents of lib/MyApp/Script are scripts that use MooseX::GetOpt. I > added a helper script in script/myapp_utils.pl that allows me to do this > (this is mock output, but you get the idea). In the example below, it > scans through the following namespaces in order: MyApp::Script, > $ENV{MYAPP_SCRIPT_NAMESPACE}, CatalystX::Script, Catalyst::Script; > looking for ::Schema::Loader. > > ### Run with no arguments > $ ./script/myapp_utils.pl > Available scripts: > > Report::Testing > Report::Documentation > Schema::Loader > User::Create > User::Modify > ... > > $ ./script/myapp_utils.pl Schema::Loader > An error has occurred: Required option missing: username > usage: myapp_utils.pl [-?bdnpu] [long options...] > -? --usage --help Prints this usage information. > -u --usr --user --username A username with which to log into > the db > -p --pwd --pass --password A password with which to log into > the db > -b --db --dsn The DSN of the source database (e.g. > "dbi:mysql:myapp") > -d --dir --directory a directory into which to install > the schema > -n --namespace the path to a directory > > $ ./script/myapp_utils.pl Schema::Loader \ > --user ogopogo \ > --pass vonmugwumpus \ > --dsn dbi:mysql:my_db \ > --dir lib \ > --namespace MyApp::Schema::MyApp > > Creating schema ... done. > > $ > > Web forms are stored in the path like Halifax::Web::Form::CD::Create > (create a new CD from the script interface). > > FWIW =) > > -Sir
Hi, Thanks for taking the time to put this information together. There is some very useful advice and ideas in there which I will take on board. MooseX::GetOpt looks very handy, and it's this sort of information - the tips and tricks of the professionals if you like - that really help to advance the skills and knowledge of others. Regards, Martin _______________________________________________ List: [email protected] Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/[email protected]/ Dev site: http://dev.catalyst.perl.org/
