MooseX::Role::BuildInstanceOf is a Perl module that provides less boilerplate when you need lots of instances.
Developer comments
There can often be a tension between coding for flexibility and for future growth and writing code that is terse, to the point, and solves the smallest possible business problem that is brought to you. Writing the minimum code to solve a particular problem has merit, yet can eventually leave you with an application that has many hacky modifications and is hard to test in an isolated manner. Minimum code should not imply minimum forward planning or poorly tested code.
For me, doing the right thing means I need to both limit myself to the smallest possible solution for a given business case, yet make sure I am not writing CODE that is impossible to grow over time in a clean manner. Generally I attempt to do this by clearly separating the problem domains under a business case into distinct classes. I then tie all the functional bits together in the loosest manner possible. Moose makes this easy, with its powerful attribute features, type coercions and Roles to augment classical inheritance.
Loose coupling and deep configurability work well with inversion of control systems, like Bread::Board or the IOC built into the Catalyst MVC framework. It helps me to defer decisions to the proper authority and also makes it easier to test my logic, since pieces are easier to test independently.
Although this leaves me with the design I desire, I find there's a lot of repeated boilerplate code and logic, particularly in my main application class which often will marshall several underlying classes, each of which is performing a particular job. For example:
package MyApp::WebPage;
use Moose;
use Path::Class qw(file);
use MyApp::Web::Text;
has text => (is=>'ro', required=>1, lazy_build=>1);
sub _build_text {
file("~/text_for_webpage")->slurp;
}
Product's homepage
Requirements:
· Perl