Plugins-Factory version 0.01 ============================ NAME Plugins::Factory - simple plugins factory. SYNOPSIS - - - - - - - - - - - - - - - - - - - - package MyProject::MyModel::News; # some model sub new { bless( ref $_[1] eq 'HASH' ? $_[1] : {}, $[0] ) } sub get_news {print $_[0]->{'news'}} 1; - - - - - - - - - - - - - - - - - - - - package MyProject::MyModel::Rss; # some model use LWP; my $singletone; sub new { unless ($singletone) { $singletone = LWP::UserAgent->new(); } return $singletone; } sub get_rss {...} 1; - - - - - - - - - - - - - - - - - - - - package MyProject::MyController::Newspaper; # some controller sub init {__PACKAGE__} sub process { my ($class,@param) = @_; ... } 1; - - - - - - - - - - - - - - - - - - - - package MyApplication; # you app use Plugins::Factory model => { plugin_namespace => 'MyProject::MyModel', init_method => 'new' }, controller => { plugin_namespace => 'MyProject::MyController', init_method => 'init' }; MyApplication->model('News',{news=>'some news'})->get_news(); # equvalent MyProject::MyModel::News->new({news=>'some news'})->get_news() MyApplication->model('MyProject::MyModel::News',{news=>'some news'})->get_news(); # alternative call MyApplication->model('Rss')->get_rss(@param); # equvalent MyProject::MyModel::Rss->new()->get_rss(@param) MyApplication->controller('Newspaper')->process(@param); # equvalent MyProject::MyController::Newspaper->init()->process(@param) DESCRIPTION Plugins::Factory find and load your plugin and save link to initial method. Every time, when you call plugins group alias with short (or full) plugin name, Plugins::Factory execute link to initial method. This is good for custom application with MVC, when you need in intuitive interface. CALL SYNOPSIS use Plugins::Factory name_group => { plugin_namespace => 'namespace::to::group::plugin', init_method => 'name_method_to_call_when_you_call_name_group' },...; alternative require Plugins::Factory; Plugins::Factory->import( name_group => { plugin_namespace => 'namespace::to::group::plugin', init_method => 'name_method_to_call_when_you_call_name_group' },... ); AUTHOR Ivan Sivirinov