25
Zend Framework ::

Architecture related with Zend Framework (Japanese only)

  • Upload
    t-k

  • View
    6.076

  • Download
    5

Embed Size (px)

Citation preview

Page 1: Architecture related with Zend Framework (Japanese only)

Zend Framework ::

Page 2: Architecture related with Zend Framework (Japanese only)

Model(Acl)

ZFでモデルを構成する

Zend Frameworkプリセット

Domain Driven Design

テーマ

Page 3: Architecture related with Zend Framework (Japanese only)

最近のZend Framework

構築が楽になってきた

日本語情報が増えてきた

実案件が増えてるはず

○ このあと実案件の紹介があります。

オープンソースも増えてきた

デスクトップアプリのリプレースもできる

Page 4: Architecture related with Zend Framework (Japanese only)

モデル

このスライド内では

ドメインモデル

○ PofEAAやDDDでのビジネスロジックそのものの抽象化

model もしくはモデル

○ MVCレイヤーでの区分として

ここでは、DBモデルのことは指しません

Page 5: Architecture related with Zend Framework (Japanese only)

Domain Layer

Data Source Layer

アプリケーション構造

Presentation Layer

Page 6: Architecture related with Zend Framework (Japanese only)

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

定番

Page 7: Architecture related with Zend Framework (Japanese only)

Domain Layer

Data Source Layer

もっとシンプルな・・・

Presentation Layer

Controller

批判される構成だが、E-ラーニングや製品デモには向いている

Model

Transaction Script

データソース=モデルとするコントローラーにアプリケーションロジックを記載する

View

Page 8: Architecture related with Zend Framework (Japanese only)

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

Page 9: Architecture related with Zend Framework (Japanese only)

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種

類のクライアントしか持たず、ユースケースレスポンスにマルチトランザクションリソースが関連していない場合は、サービスレイヤーは不要

プロジェクトの性質によって決定される

Page 10: Architecture related with Zend Framework (Japanese only)

Application Layer

DDD Layer

UI Layer

Domain Layer

Service Layer

Infrastructure Layer

ビジネスロジックをDomain Layerで

実現する

Page 11: Architecture related with Zend Framework (Japanese only)
Page 12: Architecture related with Zend Framework (Japanese only)

Stays out of your model design

Framework Shootout, 30 January 2010

http://www.slideshare.net/bngsudheer/frame

work-shootout-zf

Page 13: Architecture related with Zend Framework (Japanese only)

クイックスタート :: 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

Page 14: Architecture related with Zend Framework (Japanese only)

クラス配置

ZFのMVCはmodule構成

コマンドラインのツールzfでapplication

をセットアップ

例) zf create project quickstart

モジュール別Bootstrapを用意する

=>モジュール別クラスのautoloadが可能に

http://framework.zend.com/manual/ja/learnin

g.autoloading.resources.html

Page 15: Architecture related with Zend Framework (Japanese only)

クラス配置(モジュラー構成) 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以下に配置

Page 16: Architecture related with Zend Framework (Japanese only)

Zend Frameworkのプリセット Model_

Model_DbTable_

Zend_Db_Tableを継承したテーブル毎のクラス

Model_Mapper_

Model DbTable間のマッピング

Service_

サービスレイヤー用

Page 17: Architecture related with Zend Framework (Japanese only)

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_

Page 18: Architecture related with Zend Framework (Japanese only)

with Zend Framework

図:Domain-Driven Designより

Page 19: Architecture related with Zend Framework (Japanese only)

Application Layer

DDD Layer

http://www.martinfowler.com/eaaCatalog/serviceLayer.html

UI Layer

Domain Layer

Service Layer

Infra Layer

ビジネスロジックをDomain Layerで

実現する

Page 20: Architecture related with Zend Framework (Japanese only)

Domain-Drive Design

ビジネスの知識をソフトウエアの中核にすえて、対象をModelに忠実に反映することを目指す

その実現に至る作法として共通の方法論が用意されている

ServiceLayerはドメインロジックのAPI

ServiceLayerより上にビジネスロジックを書かない、DALにロジックを書かないというのを徹底して素直にリファクタリング

Page 21: Architecture related with Zend Framework (Japanese only)

DDD with Zend Framework

http://blog.fedecarg.com/2009/03/22/zend-

framework-domain-driven-design/

DDDに則った説明

DDDの基底クラスなど

Page 22: Architecture related with Zend Framework (Japanese only)

ZFはDDDとの相性がいい

非DDDな枠組みに影響されない

モデルの構成が自由で、zfツールもカスタマイズしやすい。

モデル以外のコンポーネントが充実

Repository構成に十分なZend_Db

CakePHPでもsymfonyでもなくZFを選ぶというメンタリティ

モデルの可搬性を重視する

まとめ

Page 23: Architecture related with Zend Framework (Japanese only)

モデルの可搬性

DDDにしておけば、フレームワーク選択は問題ではなくなる

Page 24: Architecture related with Zend Framework (Japanese only)

モデル以外の充実 Webサービスサーバー

○ Zend_XmlRpc_Server

○ Zend_Soap_Server

○ Zend_Json_Server

○ Zend_Amf_Server

全文検索インデックス○ Zend_Search_Lucene

キュー○ Zend_Queue

クラウドサポート○ Zend_Service_Amazon

○ Zend_Service_WindowsAzure

Page 25: Architecture related with Zend Framework (Japanese only)

今からやるならDDD