Bread::Board
Ligando seus componentes sem solda
Bread::Board

●   Em Java:            ●   Em Perl
    –   Spring              –   IOC
    –   Google Guice        –   Bread::Board
    –   PicoContainer
Inversão de Controle
Don't call us
We'll call you
Inversão de Controle

package UserButton; # extende Button
sub on_click { … }
sub on_paint { … }

package main;
my $w = Prima::MainWindow->create( ... );
$w->insert( "UserButton", ... );
run Prima;
Injeção de Dependências
Injeção de Dependências

sub get_author_names {
   my ($self, $db) = @_;
   my @authors = $db->resultset('Authors')
                    ->search({ ... })->all;
   return map {
      $_->get_column('name')
   } @authors;
}
Injeção de Dependências

sub get_author_names {
   my ($self, $authors_rs) = @_;
   my @authors = $authors_rs->all;
   return map {
      $_->get_column('name')
   } @authors;
}
Exemplo

my $c = container Compra   =>   as {
   service cadastro        =>   ( ...   );
   service dados_cliente   =>   ( ...   );
   service dados_produto   =>   ( ...   );
   service pagamento       =>   ( ...   );
   service compra          =>   ( ...   );
};
Exemplo

service dados_cliente => (
   dependencies => {
      rs => depends_on('/Model/rs_cliente')
   },
   block => sub {
      my $s = shift;
      return $s->param('rs')->single;
   }
);
Exemplo

service pagamento => (
   dependencies => [
      depends_on('dados_cliente'),
      depends_on('dados_produto'),
   ],
   parameters => {
      api_key => { isa => 'Str', is => 'ro' },
   },
   class => 'Pagamento',
);
Referências

●   http://martinfowler.com/articles/injection.html
●   http://googletesting.blogspot.com
●   https://metacpan.org/module/Bread::Board

Bread board

  • 1.
  • 3.
    Bread::Board ● Em Java: ● Em Perl – Spring – IOC – Google Guice – Bread::Board – PicoContainer
  • 4.
  • 5.
  • 6.
    Inversão de Controle packageUserButton; # extende Button sub on_click { … } sub on_paint { … } package main; my $w = Prima::MainWindow->create( ... ); $w->insert( "UserButton", ... ); run Prima;
  • 7.
  • 9.
    Injeção de Dependências subget_author_names { my ($self, $db) = @_; my @authors = $db->resultset('Authors') ->search({ ... })->all; return map { $_->get_column('name') } @authors; }
  • 10.
    Injeção de Dependências subget_author_names { my ($self, $authors_rs) = @_; my @authors = $authors_rs->all; return map { $_->get_column('name') } @authors; }
  • 11.
    Exemplo my $c =container Compra => as { service cadastro => ( ... ); service dados_cliente => ( ... ); service dados_produto => ( ... ); service pagamento => ( ... ); service compra => ( ... ); };
  • 12.
    Exemplo service dados_cliente =>( dependencies => { rs => depends_on('/Model/rs_cliente') }, block => sub { my $s = shift; return $s->param('rs')->single; } );
  • 13.
    Exemplo service pagamento =>( dependencies => [ depends_on('dados_cliente'), depends_on('dados_produto'), ], parameters => { api_key => { isa => 'Str', is => 'ro' }, }, class => 'Pagamento', );
  • 15.
    Referências ● http://martinfowler.com/articles/injection.html ● http://googletesting.blogspot.com ● https://metacpan.org/module/Bread::Board