=encoding utf8 =head1 NAME DBIx::Class::Manual::Component - DBIx::Class コンポーネントを開発する =head1 コンポーネントとは何か =begin original A component is a module that can be added in to your DBIx::Class classes to provide extra functionality. A good example is the PK::Auto component which automatically retrieves primary keys that the database itself creates, after the insert has happened. =end original DBIx::Classのクラスに付加的な機能を提供するために追加するモジュールのことです。 好例としては、PK::Autoコンポーネントがあります。PK::Autoは、insertの後に、 データベース自身が、作ったプライマリキーを取り出します。 =head1 使い方 =begin original Components are loaded using the load_components() method within your DBIx::Class classes. =end original コンポーネントは、自分のDBIx::Class クラスの中に、 load_components() メソッドを使って、ロードします。 package My::Thing; use base qw( DBIx::Class::Core ); __PACKAGE__->load_components(qw/InflateColumn::DateTime TimeStamp/); =begin original Generally you do not want to specify the full package name of a component, instead take off the DBIx::Class:: part of it and just include the rest. If you do want to load a component outside of the normal namespace you can do so by prepending the component name with a +. =end original たいてい、コンポーネントの完全なパッケージ名を指定したくはないでしょうから、 その代わりに、DBIx::Class:: の部分を外して、残りの部分だけを含めます。 通常の名前空間以外のコンポーネントをロードしたいなら、 コンポーネント名の前に + を付けてください。 __PACKAGE__->load_components(qw/ +My::Component /); =begin original Once a component is loaded all of it's methods, or otherwise, that it provides will be available in your class. =end original コンポーネントがロードされると、全てのコンポーネントが提供する メソッドが自分のクラスで有効になります。 =begin original The order in which is you load the components may be very important, depending on the component. If you are not sure, then read the docs for the components you are using and see if they mention anything about the order in which you should load them. =end original コンポーネントをロードする順番は非常に重要です。コンポーネントに依存します。 よくわからなければ、使っているコンポーネントのドキュメントを読み、 ロードすべき順番について何か書かれているかを見てください。 =head1 コンポーネントを作る =begin original Making your own component is very easy. =end original 自分自身のコンポーネントを作るのはとても簡単です。 package DBIx::Class::MyComp; use base qw(DBIx::Class); # Create methods, accessors, load other components, etc. 1; =begin original When a component is loaded it is included in the calling class' inheritance chain using L. As well as providing custom utility methods, a component may also override methods provided by other core components, like L and others. For example, you could override the insert and delete methods. =end original コンポーネントがロードされると、呼び出しているクラスの、 Lを使った、継承チェーンに含まれます。 カスタムユーティリティメソッドを提供するのと同様に、 コンポーネントが、他のコアコンポーネントで提供されている メソッドを上書きするかもしれません。Lや その他のコンポーネントのように。 例えば、insert と delete メソッドをオーバーライドできます。 sub insert { my $self = shift; # Do stuff with $self, like set default values. return $self->next::method( @_ ); } sub delete { my $self = shift; # Do stuff with $self. return $self->next::method( @_ ); } =begin original Now, the order that a component is loaded is very important. Components that are loaded first are the first ones in the inheritance stack. So, if you override insert() but the DBIx::Class::Row component is loaded first then your insert() will never be called, since the DBIx::Class::Row insert() will be called first. If you are unsure as to why a given method is not being called try printing out the Class::C3 inheritance stack. =end original こうなると、コンポーネントをロードする順番はとても重要です。 最初にロードされるコンポーネントは、継承スタックの最初のものです。そのため、 insert() をオーバーライドしたとして、DBIx::Class::Rowコンポーネントが最初に ロードされると、自分のinsert()は、決して呼ばれません。DBIx::Class::Row insert() が最初に呼ばれてしまいます。あたえたメソッドが呼ばれないかよくわからなければ、 Class::C3 の継承スタックを出力してみてください。 print join ', ' => Class::C3::calculateMRO('YourClass::Name'); =begin original Check out the L docs for more information about inheritance. =end original 継承についてより詳しくは、Lのドキュメントをチェックしてください。 =head1 存在するコンポーネント =head2 付加的なもの =begin original These components provide extra functionality beyond basic functionality that you can't live without. =end original 下記のコンポーネントは基本的な機能を越えた、 これ無しでは生きていけないような、付加的な機能を提供します。 =begin original L - Class::DBI Compatibility layer. =end original L - Class::DBI 互換レイヤ。 =begin original L - Build forms with multiple interconnected objects. =end original L - 複数の関連するオブジェクトでフォームを作る。 =begin original L - Like FromForm but with DBIx::Class and HTML::Widget. =end original L - FromFormと似ていますが、DBIx::Class とHTML::Widget。 =begin original L - Modify the position of objects in an ordered list. =end original L - 整列されたリスト内のオブジェクトの位置を修正する。 =begin original L - Retrieve automatically created primary keys upon insert. =end original L - insert で、自動的に作られたプライマリキーを取得する。 =begin original L - Display the amount of time it takes to run queries. =end original L - クエリを実行するのにかかった時間を表示する。 =begin original L - Declare virtual columns that return random strings. =end original L - ランダムな文字列を返す仮想カラムを宣言する。 L - Implicit UUID columns. =begin original L - CRUD methods. =end original L - CRUD メソッド。 =head2 実験的 These components are under development, their interfaces may change, they may not work, etc. So, use them if you want, but be warned. 下記のコンポーネントは開発中です。インターフェースは代わるかもしれませんし、 動かなかったりするかもしれません。お望みなら使ってください、 ただし、注意してください。 =begin original L - Validate all data before submitting to your database. =end original L - データベースに入れる前に全てのデータが正しいか確認する。 =head2 コア =begin original These are the components that all, or nearly all, people will use without even knowing it. These components provide most of DBIx::Class' functionality. =end original 下記のコンポーネントは全ての、ほとんど全ての、人がそれを知らなくても使うでしょう。 下記のコンポーネントはDBIx::Classの機能のほとんどを提供します。 =begin original L - Loads various components that "most people" would want. =end original L - "ほとんどの人"が欲しい様々なコンポーネントをロードします。 =begin original L - Lets you build groups of accessors. =end original L - アクセサのグルーを作ります。 =begin original L - Non-recommended classdata schema component. =end original L - 非推奨のクラスデータスキーマコンポーネント。 =begin original L - Automatically create objects from column data. =end original L - カラムデータから自動的にオブジェクトを作る。 =begin original L - This class contains methods for handling primary keys and methods depending on them. =end original L - このクラスはプライマリキーを扱うメソッドとそれに依存するメソッドを含みます。 =begin original L - Inter-table relationships. =end original L - テーブル間のリレーションシップ。 =begin original L - Provides a classdata table object and method proxies. =end original L - クラスデータテーブルオブジェクトとメソッドプロキシを提供します。 =begin original L - Basic row methods. =end original L - 基本的な列のメソッド。 =head1 SEE ALSO L =head1 AUTHOR Aran Clary Deltac =head1 翻訳について 翻訳者:加藤敦 (ktat.is at gmail.com) Perlドキュメント日本語訳 Project にて、 Perlモジュール、ドキュメントの翻訳を行っております。 http://perldocjp.sourceforge.jp/ http://sourceforge.jp/projects/perldocjp/ http://www.freeml.com/perldocjp/ http://www.perldoc.jp =cut