2012-08-13 4 views
1

내가 만들고있는 Catalyst 제품에는 본질적으로 똑같은 여러 가지 서브 루틴이 있지만 모두 앱의 다른 부분에 있습니다. Catalyst에서 어디에서든지 서브 루틴을 호출 할 수있는 중앙 위치가 있습니까? 나는 코드 반복을 피하고 싶다. 감사!촉매 글로벌 서브 루틴

답변

3

모범 사례인지 모르겠지만 메인 모듈을 이렇게 복잡하게 만드는 데 아무런 문제가 없습니다. 그런 다음 컨텍스트 개체가있는 모든 위치 (예 : 어디서나)에서 쉽게 호출 할 수 있습니다.

package MyApp; 
... 
sub my_frequently_used_sub { 
    my ($c, @args) = @_; 
    ... 
} 


package MyApp::Controller::Foo; 
... 
sub some_action :Path { 
    my ($self, $c, @args) = @_; 
    ... 
    my $result = $c->my_frequently_used_sub(); 
    ... 
} 
2

Catalyst 지금은 Moose을 기반으로합니다. 해결책으로 its roles을 사용할 수 있습니다.

1

예를 들어 모델에서 사용하기 때문에 함수가 Catalyst 응용 프로그램 외부에서 사용 가능해야하는 경우 완전히 독립적 인 모듈로 이동해야합니다. 정말로 Catalyst에만 해당되는 경우 403 허용되지 않음 또는 404 찾을 수 없음 오류 페이지와 같이 전달하거나 분리 할 수있는 개인 작업을 생성 할 수 있습니다. 정상적인 Perl 서브 시스템이라면 mob이나 Root 컨트롤러가 제안한대로 앱 클래스에 넣을 수 있습니다. 더 나은 솔루션을 제공 할 수 있도록 함수의 이름을 지정할 수 있습니까?