MVCのModelをWAFから切り離しつつ、Modelも(DBとの仲立ちをさせる)ORM用スキーマと(ビジネスロジックを書く)ドメインモデルとで分けたいと思い、ここ数日調査や試行をしています。私はPoEAAを読んで、かっとなって「どうせ趣味で書くならドメインモデルしかない!」と思い込んでいます。これがまず出発点です。今回の記事は、そのモデルの守備範囲をどうしようか、というお話です。
まず、CatalystなどのWAFからMVCのMを切り離すことについては、牧さん(lestrratさん)の『モダンPerl入門』(pp.116-121)などで明快に解説されています。
次に、サービスクラスとモデルクラスの使い分けについても、dannさんのCatalystCon #1でのCatalystからModelを切り離せ - MVCのMのあるべき姿 -の発表でも言及があります。
それでは、ドメインモデルはDAO/DTOやORMの方面まで面倒を見るべきなのでしょうか。
今回細々と開発しているFF14ユーザー向けウェブサービスであるAmikecoでは、ORMとしてDBIx::Classの使用を想定しています。また、サービスクラスやモデルクラスは、Mooseクラスを想定しています。
というような状態での具体的な実装方法について、調べてみたところいくつかの類型があるので、試行してみての感想を添えて備忘録として書いておきます。
- MooseクラスでDBIx::Classを継承して、ドメインモデルにスキーマを兼務させる
- DBICx::Modelerを使って、スキーマクラスとモデルのMooseクラスを分離する
- MooseX::DBICを使う
- 永続化非対象の情報をどう持つか
- 番外編: Moosified ORMを使う
- まとめ
最近のコメント