DI コンテナ + POPO Model のアーキテクチャ POPO Service POPO Model (Schema::* など参照 ) Catalyst Controller Catalyst View DIコンテナ Catalyst Plugin DI コンテナで POPO を Wiring Plugin or Controller で DI コンテナを参照し、 WAF と M を繋ぐ
DI コンテナを利用したモデル構築
DI コンテナ利用の利点
モデルは DI コンテナで Wiring されるため、モデルが Catalyst の context に依存することが無くなる
モデル間の実装の依存関係が切れる
モデル (Service, Model) の参照方法の一例
Controller から直に DI コンテナを参照する
$self->model(“Service::Blog”)->create();
プラグイン化して Context から DI コンテナを参照する
$c->pmodel(“Service::Blog”)->hello();
Catalyst::Model::Adaptor じゃできない?
Catalyst::Model::Adaptor では、 POPO Model と Adaptor が 1:1 対応してしまう
まとめ
Catalyst は WAF としては必要十分
モデル (Service, Domain Model) について
モデルは WAF から切り離すべき
ビジネスロジックはモデルに押し込む
MVC を考えるときは、モデルの Testability を中心に考える
モデルのアーキテクチャについて
Web アプリケーションの多くは、 ServiceLayer + Domain Model の変形でよいのでは
Catalyst に不足しているもの
WAF と POPO Model を繋ぐ仕組み
DI コンテナはそれに対する一つの答え
MVC の M の拡張などは WAF ではなく、 AF で
ご清聴ありがとうございました !
付録
Service Layer+Domain Model の構築に必要な仕組み (Application Framework としての仕組み)
0 comments
Post a comment