6

私はこれをいくつかの方法で実行しようとしましたが、どれも十分に優雅に見えません。(CPAN や Moose が既にこれを持っているかどうかも疑問に思っています。私が時間をかけて行った数十回の検索では、完全に一致するものは何も示されていません。)

クラスのタイプを作成したい

  • 自分自身を宛先タイプとしてロードする他のクラスの Base + Facade + Factory です。
  • 「工場」は公正Base->new( %params )であり、これは個々のサブクラスによって登録されたポリシーに基づいてタイプを作成します。
  • 各サブクラスは Base クラスのドメインに関する基本的なことを知っていますが、私はそれを最小限に抑えようとしています。以下の例を参照してくださいUnresolvedPath。最初に存在を確認する必要があることを知っているだけです。

この明白な例は、ファイル システムのディレクトリとファイルです。

package Path;
use Moose;

...

sub BUILD { 
    my ( $self, $params ) = @_;
    my $path = $params->{path};

    my $class_name;
    foreach my $test_sub ( @tests ) { 
        $class_name = $test_sub->( $path );
        last if $class_name;
    }
    croak "No valid class for $path!" unless defined $class_name;
    $class_name->BUILD( $self, $params );
}

package Folder; 
use Moose;

extends 'Path';

use Path register => selector => sub { -d $_[0] };

sub BUILD { ... }

package UnresolvedPath; 

extends 'Path';

use Path register position => 1, selector => sub { !-e $_[0] };
  • 質問: Moose はこれに対して適切な解決策を提供しますか? または、バルクのために Class::MOP に入る必要がありますか?
4

2 に答える 2

3

http://code2.0beta.co.uk/moose/svn/MooseX-AbstractFactory/をのぞいて、気軽に盗んでください。(私の。)

于 2009-03-16T17:37:33.323 に答える
2

本当にビルダーパターンまたは抽象ファクトリパターンを実行したい場合は、それを実行できます。停止するものは何もありません。しかし、おそらくあなたが本当に必要としているのは、制御の反転/依存性注入ですか?そのためには、ブレッドボードをチェックアウトすることができます

于 2009-03-16T17:01:35.000 に答える