[perl] распределенное ООП Catalyst::DispatchType::Chained

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

[perl] распределенное ООП Catalyst::DispatchType::Chained

Непрочитанное сообщение ProFTP » 2010-03-04 13:54:54

нашел во фреймворке интересный вариант движка Catalyst::DispatchType::Chained

записать так

Код: Выделить всё

  sub blog : Chained PathPart('blog') CaptureArgs(0) { }


  sub user : Chained('blog') PathPart('user') CaptureArgs(1) {
      my ( $self, $c, $id_un ) = @_;
      $c->stash->{ message } = "Hello 2";
      $c->stash->{ arg_sum }->[0] = $id_un;
  }




  sub view : Chained('user') PathPart('view') CaptureArgs(1) {
      my ( $self, $c, $id ) = @_;
      $c->stash->{ message } .= "World!";
      $c->stash->{ arg_sum }->[1] = $id;

  }







  sub view_page_off : Chained('view')  PathPart('') Args(1) {
      my ( $self, $c, $page ) = @_;
      
      $c->stash->{ arg_sum }->[2] = $page;
      
   $c->forward( 'view_blog_message', [ @{$c->stash->{ arg_sum }} ] );
    
  }
  


  

  sub view_off : Chained('view') PathPart('') Args(0) {
      my ( $self, $c ) = @_;

   $c->forward( 'view_blog_message', [ @{$c->stash->{ arg_sum }} ] );
   
  }



  sub view_page_user : Chained('user') PathPart('') Args(1) {
      my ( $self, $c, $page ) = @_;

      $c->stash->{ arg_sum }->[1] = $page;
      
# print '99';
   $c->forward( 'view_blog', [ @{$c->stash->{ arg_sum }} ] );
   
  }
  


  sub view_user : Chained('user') PathPart('') Args(0) {
      my ( $self, $c ) = @_;

   $c->forward( 'view_blog', [ @{$c->stash->{ arg_sum }} ] );
   
   
  }
  


и методы будут вызыватся так, друг за другом, как роли... красиво получается

Код: Выделить всё

| Path Spec                           | Private                              |
+-------------------------------------+--------------------------------------+
| /blog/user/*/view/*                 | /blog/blog (0)                       |
|                                     | -> /blog/user (1)                    |
|                                     | -> /blog/view (1)                    |
|                                     | => /blog/view_off                    |
| /blog/user/*/view/*/*               | /blog/blog (0)                       |
|                                     | -> /blog/user (1)                    |
|                                     | -> /blog/view (1)                    |
|                                     | => /blog/view_page_off               |
| /blog/user/*/*                      | /blog/blog (0)                       |
|                                     | -> /blog/user (1)                    |
|                                     | => /blog/view_page_user              |
| /blog/user/*                        | /blog/blog (0)                       |
|                                     | -> /blog/user (1)                    |
|                                     | => /blog/view_user                   |
'-------------------------------------+--------------------------------------'

в других языках, ни в java, ни в php такого не видел...
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35429
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: [perl] распределенное ООП Catalyst::DispatchType::Chaine

Непрочитанное сообщение Alex Keda » 2010-05-10 12:18:20

и зачем это?
Убей их всех! Бог потом рассортирует...

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: [perl] распределенное ООП Catalyst::DispatchType::Chaine

Непрочитанное сообщение ProFTP » 2010-05-10 12:56:12

если у тебя есть ~~100-400 классов большая прогрмаа, много страниц, много кода

они выполняют различные действия много разных url

тут можно поставить отрибуты

Код: Выделить всё

  sub view_user : Chained('user') PathPart('') Args(0) {
методы будут вызыватся друг за другом... (в отличая если написать mod_rewrite)
типо наследоватся, ну все можно привязывать к объекту $c->stash

как это по другому сделать?
Последний раз редактировалось Alex Keda 2010-05-10 12:56:45, всего редактировалось 1 раз.
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение