抽象My::Objectと具体的な役割の実装My::Object::TypeAとMy::Object::TypeBを定義するとします。保守性の理由から、オブジェクトタイプを調べて役割を適用するハードコードされたテーブルは必要ありません。DWIMmyの例として、My :: Object:でこれらの線に沿って何かを探しています。
has => 'id' (isa => 'Str', required => 1);
sub BUILD {
my $self = shift;
my $type = $self->lookup_type(); ## Returns 'TypeB'
{"My::Object::$type"}->meta->apply($self);
}
次の手順を実行して、My :: Object::TypeBロールが適用されたMy::Objectを取得します。
my $obj = My::Object(id = 'foo')
これは私が望むことをするつもりですか、それとも私は完全に間違った方向に進んでいますか?
編集:私はこれを単純化しすぎました。オブジェクトをインスタンス化するときにタイプを知る必要はありません。オブジェクトにタイプを判別させ、正しいロールのメソッドを適切に適用してもらいたいのです。これを明確にするために質問を編集しました。