software development with symfony

36
Symfony による ソフトウェア開発入門 2012/4/7 第 3 回 関西 PHP 勉強会 PHP メンターズ 久保敦啓 (KUBO Atsuhiro)

Upload: atsuhiro-kubo

Post on 28-May-2015

2.726 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Software Development with Symfony

Symfony によるソフトウェア開発入門

2012/4/7 第 3 回 関西 PHP 勉強会

PHP メンターズ久保敦啓 (KUBO Atsuhiro)

Page 2: Software Development with Symfony

久保敦啓 (KUBO Atsuhiro)● 株式会社アイテマン 代表取締役● Piece Project プロジェクトリード● PHP メンターズ● Twitter @iteman

Page 3: Software Development with Symfony

Piece Framework● PHP フレームワーク、ツール● オープンソースソフトウェア● Piece Project

開発者募集中 スポンサー募集中

Page 4: Software Development with Symfony

Piece Framework● Twitter @piece_framework● ソースコード

https://github.com/piece● Web サイト

http://piece-framework.com/

Page 5: Software Development with Symfony

PHP メンターズ● Twitter @phpmentors● ソースコード

https://github.com/phpmentors-jp● Web サイト・ブログ

http://phpmentors.jp/● 有償トレーニングサービス始めました。

Page 6: Software Development with Symfony

良いソフトウェアとは?

Page 7: Software Development with Symfony

“ ソフトウェアの核心は、ドメインに関係した問題をユーザのために解決する能力である。”— エリック・エヴァンスのドメイン駆動設計

Page 8: Software Development with Symfony

巨人の肩の上に立つ

Page 9: Software Development with Symfony

例えば…● 開発プロセス・方法論● アーキテクチャパターン・スタイル● デザインパターン● フレームワーク● ライブラリ● …

Page 10: Software Development with Symfony

アーキテクチャパターン・スタイル● モデル・ビュー・コントローラ● レイヤ● REST● CQRS● DCI● …

Page 11: Software Development with Symfony

“ 使い方を機能として実装する”— パターン、 Wiki 、 XP

Page 12: Software Development with Symfony

ドメインとは?

Page 13: Software Development with Symfony

ドメインモデル

Page 14: Software Development with Symfony

レイヤーアーキテクチャとドメインモデル

Presentation

Domain

Data Source

Infrastructure

LoggingSecurity

Validationetc...

Controllers

Domain Objects Services

ORM

Views

Page 15: Software Development with Symfony

ドメイン駆動設計

Page 16: Software Development with Symfony

ドメイン駆動設計とは?● ドメインモデルは、ドメイン知識を深めながら反復

的( iterative )に深化させていく。

● ドメインモデルは、開発者とドメイン知識をもつ人(ユーザ、専門家等)との間の共通言語となるようにする。

● ドメインモデルは、実装コードときちんと対応付けられるようにする。

—Domain-Driven Design のエッセンス

Page 17: Software Development with Symfony

代表的なパターン● ユビキタス言語● モデル駆動設計● 実践的モデラー

Page 18: Software Development with Symfony
Page 19: Software Development with Symfony

Symfony の歴史

Page 20: Software Development with Symfony
Page 21: Software Development with Symfony

Symfony の特徴

Page 22: Software Development with Symfony

Symfony の特徴● DI コンテナ● コンフィギュレーション● バンドル

Page 23: Software Development with Symfony

DI コンテナ

Page 24: Software Development with Symfony

DI コンテナ● Dependency Injection

依存関係逆転の原則 (DIP: The Dependency Inversion Principle)

● コンポーネント間の疎結合化● テスタビリティの向上● コンポーネント構成知識の集約

コンポーネント構成定義言語

Page 25: Software Development with Symfony
Page 26: Software Development with Symfony

DependencyInjection コンポーネント

● 複数の定義フォーマット YAML, XML, PHP

● 複数のインジェクション方法 コンストラクタ、セッター、フィールド

● ファクトリクラス・サービス● タグによる拡張ポイント・拡張● コンパイル時の変形・最適化

Page 27: Software Development with Symfony

DI コンテナ定義の例...services: piece_questetra.questetra_client: scope: prototype class: "%piece_questetra.questetra_client.class%" calls: - [ setRequestContext, [ "@piece_questetra.request_context" ] ] piece_questetra.request_context: class: "%piece_questetra.request_context.class%" arguments: - "%piece_questetra.context_root%" - "%piece_questetra.user_id%" - "%piece_questetra.password%"

Page 28: Software Development with Symfony

コンフィギュレーション

Page 29: Software Development with Symfony

コンフィギュレーション● 問題空間の言語

実装コンポーネントの構造に影響を受けない

● ドメイン特化言語 DSL: Domain-Specific Language コンフィギュレーション DSL

Page 30: Software Development with Symfony

Configuration コンポーネント● グラマー言語 (PHP) による文法定義

● 複数の保存フォーマット

YAML, XML, PHP● DependencyInjection コンポーネントとの統合

DI エクステンション毎のスロット● 複数回の読み込み

例)構成ファイルとコマンドライン引数のマージ

Page 31: Software Development with Symfony

文法定義の例$treeBuilder->root('piece_questetra') ->children() ... ->arrayNode('authentication') ->isRequired() ->children() ->scalarNode('user_id') ->isRequired() ->cannotBeEmpty() ->end() ->scalarNode('password') ->isRequired() ->cannotBeEmpty() ->end() ->end() ->end()

->end();

Page 32: Software Development with Symfony

構成定義の例piece_questetra: context_root: "%piece_questetra.context_root%" authentication: user_id: "%piece_questetra.user_id%" password: "%piece_questetra.password%"

Page 33: Software Development with Symfony

コンフィギュレーションから DI コンテナへの変換

Page 34: Software Development with Symfony

バンドル

Page 35: Software Development with Symfony

バンドル● Symfony におけるモジュール(パッケージ)● 粗粒度の機能(フィーチャー)の提供単位

Web フレームワーク (FrameworkBundle) Web アプリケーション

● DI コンテナ定義、コンフィギュレーション、クラス、 Web リソース等を束ねたもの

Page 36: Software Development with Symfony

● エリック・エヴァンス「エリック・エヴァンスのドメイン駆動設計」、翔泳社、 2011 年。

● 江渡 浩一郎「パターン、 Wiki 、 XP ~ 時を超えた創造の原則」、技術評論社、 2009 年。

● クシシュトフ・チャルネッキ、ウールリシュ・ W ・アイセンアッカ「ジェネレーティブプログラミング」、翔泳社、 2008 年。

参考