View
6.079
Download
5
Category
Preview:
Citation preview
Zend Framework ::
Model(Acl)
ZFでモデルを構成する
Zend Frameworkプリセット
Domain Driven Design
テーマ
最近のZend Framework
構築が楽になってきた
日本語情報が増えてきた
実案件が増えてるはず
○ このあと実案件の紹介があります。
オープンソースも増えてきた
デスクトップアプリのリプレースもできる
モデル
このスライド内では
ドメインモデル
○ PofEAAやDDDでのビジネスロジックそのものの抽象化
model もしくはモデル
○ MVCレイヤーでの区分として
ここでは、DBモデルのことは指しません
Domain Layer
Data Source Layer
アプリケーション構造
Presentation Layer
Domain Layer
Data Source Layer
シンプルなWebアプリケーション
http://www.martinfowler.com/eaaCatalog/transactionScript.html
Zend_Db
Presentation Layer View, Controller
実用的にはこのパターンが多い。Transaction ScriptがService Layerに分類されることがある。
ModelTransaction Script
定番
Domain Layer
Data Source Layer
もっとシンプルな・・・
Presentation Layer
Controller
批判される構成だが、E-ラーニングや製品デモには向いている
Model
Transaction Script
データソース=モデルとするコントローラーにアプリケーションロジックを記載する
View
Domain Layer
Data Source Layer
ActiveRecord
http://www.martinfowler.com/eaaCatalog/activeRecord.html
Presentation Layer
ActiveRecordはデータベースのテーブルやビューの行をラップし、データベースアクセスをカプセル化し、ドメインロジックを追加するオブジェクト
ActiveRecord
Domain
Data Source
ActiveRecord
Domain
Data Source
ActiveRecord
Domain
Data Source
Domain Layer
Data Source Layer
ServiceLayer
ServiceLayer
Domain Model
Data Source Layer
http://www.martinfowler.com/eaaCatalog/serviceLayer.html
Presentation Layer
PofEAA 9.4.2
ビジネスロジックが1種
類のクライアントしか持たず、ユースケースレスポンスにマルチトランザクションリソースが関連していない場合は、サービスレイヤーは不要
プロジェクトの性質によって決定される
Application Layer
DDD Layer
UI Layer
Domain Layer
Service Layer
Infrastructure Layer
ビジネスロジックをDomain Layerで
実現する
Stays out of your model design
Framework Shootout, 30 January 2010
http://www.slideshare.net/bngsudheer/frame
work-shootout-zf
クイックスタート :: create-
model
http://framework.zend.com/manual/ja/lea
rning.quickstart.create-model.html
DbTableクラスの作成
zf create db-table Guestbook guestbook
モデルクラスの作成
zf create model Guestbook
コントローラーの作成
zf create controller Guestbook
クラス配置
ZFのMVCはmodule構成
コマンドラインのツールzfでapplication
をセットアップ
例) zf create project quickstart
モジュール別Bootstrapを用意する
=>モジュール別クラスのautoloadが可能に
http://framework.zend.com/manual/ja/learnin
g.autoloading.resources.html
クラス配置(モジュラー構成) Fooモジュール
forms
models
○ models/mappers
○ models/DbTable
plugins
services
Bootstrap.php
Foo_Form_
Foo_Model_
○ Foo_Model_Mapper_
○ Foo_Model_DbTable_
Foo_Plugin_
Foo_Service_
Foo_Bootstrap
Module_Bootstrapで拡張可能
例) APP_DIR/application/Foo/ ->redirectUrl以下に配置
Zend Frameworkのプリセット Model_
Model_DbTable_
Zend_Db_Tableを継承したテーブル毎のクラス
Model_Mapper_
Model DbTable間のマッピング
Service_
サービスレイヤー用
Domain Layer
Data Source Layer
レイヤーとの対応
ServiceLayer
Domain Model
Data Source Layer
http://www.martinfowler.com/eaaCatalog/serviceLayer.html
Model_DbTable_
Presentation Layer
Model_
Model_Mapper_
Service_
with Zend Framework
図:Domain-Driven Designより
Application Layer
DDD Layer
http://www.martinfowler.com/eaaCatalog/serviceLayer.html
UI Layer
Domain Layer
Service Layer
Infra Layer
ビジネスロジックをDomain Layerで
実現する
Domain-Drive Design
ビジネスの知識をソフトウエアの中核にすえて、対象をModelに忠実に反映することを目指す
その実現に至る作法として共通の方法論が用意されている
ServiceLayerはドメインロジックのAPI
ServiceLayerより上にビジネスロジックを書かない、DALにロジックを書かないというのを徹底して素直にリファクタリング
DDD with Zend Framework
http://blog.fedecarg.com/2009/03/22/zend-
framework-domain-driven-design/
DDDに則った説明
DDDの基底クラスなど
ZFはDDDとの相性がいい
非DDDな枠組みに影響されない
モデルの構成が自由で、zfツールもカスタマイズしやすい。
モデル以外のコンポーネントが充実
Repository構成に十分なZend_Db
CakePHPでもsymfonyでもなくZFを選ぶというメンタリティ
モデルの可搬性を重視する
まとめ
モデルの可搬性
DDDにしておけば、フレームワーク選択は問題ではなくなる
モデル以外の充実 Webサービスサーバー
○ Zend_XmlRpc_Server
○ Zend_Soap_Server
○ Zend_Json_Server
○ Zend_Amf_Server
全文検索インデックス○ Zend_Search_Lucene
キュー○ Zend_Queue
クラウドサポート○ Zend_Service_Amazon
○ Zend_Service_WindowsAzure
今からやるならDDD
Recommended