データベースと対話するMooseロールの小さな(まもなく大きくなる)セットがあります。create_foo_record、update_foo_record、delete_foo_recordなどのメソッドがあります(データの変換と正規化、アクションのログ記録などを行うため、データベースアクセスの単純なラッパーではありません。場合によっては、関連するレコードも作成および更新することがあります。 。)
このコードはかなり一般的であるため、カットアンドペーストコードのモジュールを20個持つのではなく、テーブル、列、正規化関数などを指示する構成パラメーターを使用して、これらのメソッドを実装するベースモジュールが必要です。
私の本能は、これらの関数を生成する「高階」の何かを書くことですが、それはムースの方法で行う方が適切だと思います。(私はムースの初心者ですが...)
素朴な方法は、基本クラスをロールにすることであり、そのメソッドは構成引数を取りますが、これは厄介なようです。
理想的には、基本クラスに、それを使用するロールが設定するプライベート構成を持たせたいと思います。
__PACKAGE__->config( foo => 'bar' );
しかし、Mooseを使用してこれを行う方法がわかりません。私の試みでは、クラスをロールに拡張することについて不平を言うエラーが発生しました。または、設定パラメータがプライベートではないことが判明し、他のロールに干渉するか、ロールを使用するCatalystコントローラの対応する設定によって干渉されています。
基本クラスで「Catalyst::Component」を使用することは可能ですが、それを何らかの形でロールに拡張することができれば、それは理想的です。しかし、私はそれを行う方法を知りません、あるいはそれが可能であるとしても。
ありがとう。