Catalystベースのアプリケーションのlib構成

| コメント(0) | トラックバック(0)



"MyApp"というアプリケーションを作りたい場合、Catalystのドキュメントにもそう書いてあるから皆ついついこう始める:



catalyst.pl MyApp

libディレクトリ内で作成されるモジュール類はこんな感じ:



lib/MyApp.pm
lib/MyApp/Controller/Root.pm
lib/MyApp/Model
lib/MyApp/View

でもいくらWebアプリといってもバッチが走ったり、他のシステムとWeb以外のところで結合したりしてほぼ100% Webだけでは完結しない。そういう時にlib/MyApp直下にWeb用のモジュールを入れてしまうと段々おかしくなってきます。


例えばWebから入ってきたなんらかしらのデータをvalidateするコードを入れたいとして、lib/MyApp/Validate.pmに入れるとこれはWeb用なのかそれ以外用なのかがわからない。かといって例えばDBIx::Class経由でデータベースを使うプロジェクトの場合、Webコンポーネント以外のスクリプト等も当然のごとく同じデータベースコードを使うのでそういうのは共通の場所に置いておきたい。


こういう事を踏まえて、Catalystのコンポーネントは最初からMyApp::Webに格納するのが後々便利。



catalyst.pl MyApp::Web

こうするとMyApp::Webの名前空間以下にCatalystコンポーネントが作られる



lib/MyApp/Web.pm
lib/MyApp/Web/Controller/Root.pm
lib/MyApp/Web/Model
lib/MyApp/Web/View

これで共通コンポーネントであるBIx::Classスキーマを足す場合は



lib/MyApp/Schema.pm

に置けるし、先ほどのWeb専用のValidate.pmを置くのであれば



lib/MyApp/Web/Validate.pm

とできる。さらに、CLIインターフェースがあるようなアプリの場合は



lib/MyApp/CLI/Validate.pm

ともできるので便利便利。


# と、偉そうに書いているが、某プロジェクトでは今朝ようやくこう変えた。


Author

Daisuke Maki (a.k.a lestrrat): Perl hacker, Director of Japan Perl Association, YAPC::Asia Tokyo Organizer (2009-2012), Fluent in Japanese, English. Ex-Brazilian (sorta)

#perl #c #ruby #java #mysql #english #japanese #opensource #stf #cooking #scotch #cigar


このエントリーをはてなブックマ
ークに追加

翔泳社よりモダンPerl入門(2010)を出版させていただいております。できれば内容をアップデートしたいので是非皆様・・・現在の在庫処理にお力をお貸しください!><

月別アーカイブ