package MyApp;
use MyFramework;

has dsn => (is => 'ro', isa => 'Str', default => 'dbi:mysql:myapp_db');
has tt_root => (is => 'ro', isa => 'Str', default => 'root/template');
has logger => (is => 'ro', isa => 'Logger', default => sub {Logger->new});
has model => (
    is => 'ro', isa => 'Model', lazy => 1,
    default => sub {
        my $m = Model->connect($_[0]->dsn);
        $m->set_logger($_[0]->logger);
        return $m;
    },
);
has view  => (
    is => 'ro', isa => 'View', lazy => 1,
    default => sub {
        View->new(logger => $_[0]->logger, tt_root => $_[0]->tt_root);
    },
);

sub call { ... }