software development with symfony
TRANSCRIPT
![Page 1: Software Development with Symfony](https://reader033.vdocuments.mx/reader033/viewer/2022052619/556600d7d8b42aa6628b489d/html5/thumbnails/1.jpg)
Symfony によるソフトウェア開発入門
2012/4/7 第 3 回 関西 PHP 勉強会
PHP メンターズ久保敦啓 (KUBO Atsuhiro)
![Page 2: Software Development with Symfony](https://reader033.vdocuments.mx/reader033/viewer/2022052619/556600d7d8b42aa6628b489d/html5/thumbnails/2.jpg)
久保敦啓 (KUBO Atsuhiro)● 株式会社アイテマン 代表取締役● Piece Project プロジェクトリード● PHP メンターズ● Twitter @iteman
![Page 3: Software Development with Symfony](https://reader033.vdocuments.mx/reader033/viewer/2022052619/556600d7d8b42aa6628b489d/html5/thumbnails/3.jpg)
Piece Framework● PHP フレームワーク、ツール● オープンソースソフトウェア● Piece Project
開発者募集中 スポンサー募集中
![Page 4: Software Development with Symfony](https://reader033.vdocuments.mx/reader033/viewer/2022052619/556600d7d8b42aa6628b489d/html5/thumbnails/4.jpg)
Piece Framework● Twitter @piece_framework● ソースコード
https://github.com/piece● Web サイト
http://piece-framework.com/
![Page 5: Software Development with Symfony](https://reader033.vdocuments.mx/reader033/viewer/2022052619/556600d7d8b42aa6628b489d/html5/thumbnails/5.jpg)
PHP メンターズ● Twitter @phpmentors● ソースコード
https://github.com/phpmentors-jp● Web サイト・ブログ
http://phpmentors.jp/● 有償トレーニングサービス始めました。
![Page 6: Software Development with Symfony](https://reader033.vdocuments.mx/reader033/viewer/2022052619/556600d7d8b42aa6628b489d/html5/thumbnails/6.jpg)
良いソフトウェアとは?
![Page 7: Software Development with Symfony](https://reader033.vdocuments.mx/reader033/viewer/2022052619/556600d7d8b42aa6628b489d/html5/thumbnails/7.jpg)
“ ソフトウェアの核心は、ドメインに関係した問題をユーザのために解決する能力である。”— エリック・エヴァンスのドメイン駆動設計
![Page 8: Software Development with Symfony](https://reader033.vdocuments.mx/reader033/viewer/2022052619/556600d7d8b42aa6628b489d/html5/thumbnails/8.jpg)
巨人の肩の上に立つ
![Page 9: Software Development with Symfony](https://reader033.vdocuments.mx/reader033/viewer/2022052619/556600d7d8b42aa6628b489d/html5/thumbnails/9.jpg)
例えば…● 開発プロセス・方法論● アーキテクチャパターン・スタイル● デザインパターン● フレームワーク● ライブラリ● …
![Page 10: Software Development with Symfony](https://reader033.vdocuments.mx/reader033/viewer/2022052619/556600d7d8b42aa6628b489d/html5/thumbnails/10.jpg)
アーキテクチャパターン・スタイル● モデル・ビュー・コントローラ● レイヤ● REST● CQRS● DCI● …
![Page 11: Software Development with Symfony](https://reader033.vdocuments.mx/reader033/viewer/2022052619/556600d7d8b42aa6628b489d/html5/thumbnails/11.jpg)
“ 使い方を機能として実装する”— パターン、 Wiki 、 XP
![Page 12: Software Development with Symfony](https://reader033.vdocuments.mx/reader033/viewer/2022052619/556600d7d8b42aa6628b489d/html5/thumbnails/12.jpg)
ドメインとは?
![Page 13: Software Development with Symfony](https://reader033.vdocuments.mx/reader033/viewer/2022052619/556600d7d8b42aa6628b489d/html5/thumbnails/13.jpg)
ドメインモデル
![Page 14: Software Development with Symfony](https://reader033.vdocuments.mx/reader033/viewer/2022052619/556600d7d8b42aa6628b489d/html5/thumbnails/14.jpg)
レイヤーアーキテクチャとドメインモデル
Presentation
Domain
Data Source
Infrastructure
LoggingSecurity
Validationetc...
Controllers
Domain Objects Services
ORM
Views
![Page 15: Software Development with Symfony](https://reader033.vdocuments.mx/reader033/viewer/2022052619/556600d7d8b42aa6628b489d/html5/thumbnails/15.jpg)
ドメイン駆動設計
![Page 16: Software Development with Symfony](https://reader033.vdocuments.mx/reader033/viewer/2022052619/556600d7d8b42aa6628b489d/html5/thumbnails/16.jpg)
ドメイン駆動設計とは?● ドメインモデルは、ドメイン知識を深めながら反復
的( iterative )に深化させていく。
● ドメインモデルは、開発者とドメイン知識をもつ人(ユーザ、専門家等)との間の共通言語となるようにする。
● ドメインモデルは、実装コードときちんと対応付けられるようにする。
—Domain-Driven Design のエッセンス
![Page 17: Software Development with Symfony](https://reader033.vdocuments.mx/reader033/viewer/2022052619/556600d7d8b42aa6628b489d/html5/thumbnails/17.jpg)
代表的なパターン● ユビキタス言語● モデル駆動設計● 実践的モデラー
![Page 18: Software Development with Symfony](https://reader033.vdocuments.mx/reader033/viewer/2022052619/556600d7d8b42aa6628b489d/html5/thumbnails/18.jpg)
![Page 19: Software Development with Symfony](https://reader033.vdocuments.mx/reader033/viewer/2022052619/556600d7d8b42aa6628b489d/html5/thumbnails/19.jpg)
Symfony の歴史
![Page 20: Software Development with Symfony](https://reader033.vdocuments.mx/reader033/viewer/2022052619/556600d7d8b42aa6628b489d/html5/thumbnails/20.jpg)
![Page 21: Software Development with Symfony](https://reader033.vdocuments.mx/reader033/viewer/2022052619/556600d7d8b42aa6628b489d/html5/thumbnails/21.jpg)
Symfony の特徴
![Page 22: Software Development with Symfony](https://reader033.vdocuments.mx/reader033/viewer/2022052619/556600d7d8b42aa6628b489d/html5/thumbnails/22.jpg)
Symfony の特徴● DI コンテナ● コンフィギュレーション● バンドル
![Page 23: Software Development with Symfony](https://reader033.vdocuments.mx/reader033/viewer/2022052619/556600d7d8b42aa6628b489d/html5/thumbnails/23.jpg)
DI コンテナ
![Page 24: Software Development with Symfony](https://reader033.vdocuments.mx/reader033/viewer/2022052619/556600d7d8b42aa6628b489d/html5/thumbnails/24.jpg)
DI コンテナ● Dependency Injection
依存関係逆転の原則 (DIP: The Dependency Inversion Principle)
● コンポーネント間の疎結合化● テスタビリティの向上● コンポーネント構成知識の集約
コンポーネント構成定義言語
![Page 25: Software Development with Symfony](https://reader033.vdocuments.mx/reader033/viewer/2022052619/556600d7d8b42aa6628b489d/html5/thumbnails/25.jpg)
![Page 26: Software Development with Symfony](https://reader033.vdocuments.mx/reader033/viewer/2022052619/556600d7d8b42aa6628b489d/html5/thumbnails/26.jpg)
DependencyInjection コンポーネント
● 複数の定義フォーマット YAML, XML, PHP
● 複数のインジェクション方法 コンストラクタ、セッター、フィールド
● ファクトリクラス・サービス● タグによる拡張ポイント・拡張● コンパイル時の変形・最適化
![Page 27: Software Development with Symfony](https://reader033.vdocuments.mx/reader033/viewer/2022052619/556600d7d8b42aa6628b489d/html5/thumbnails/27.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052619/556600d7d8b42aa6628b489d/html5/thumbnails/28.jpg)
コンフィギュレーション
![Page 29: Software Development with Symfony](https://reader033.vdocuments.mx/reader033/viewer/2022052619/556600d7d8b42aa6628b489d/html5/thumbnails/29.jpg)
コンフィギュレーション● 問題空間の言語
実装コンポーネントの構造に影響を受けない
● ドメイン特化言語 DSL: Domain-Specific Language コンフィギュレーション DSL
![Page 30: Software Development with Symfony](https://reader033.vdocuments.mx/reader033/viewer/2022052619/556600d7d8b42aa6628b489d/html5/thumbnails/30.jpg)
Configuration コンポーネント● グラマー言語 (PHP) による文法定義
● 複数の保存フォーマット
YAML, XML, PHP● DependencyInjection コンポーネントとの統合
DI エクステンション毎のスロット● 複数回の読み込み
例)構成ファイルとコマンドライン引数のマージ
![Page 31: Software Development with Symfony](https://reader033.vdocuments.mx/reader033/viewer/2022052619/556600d7d8b42aa6628b489d/html5/thumbnails/31.jpg)
文法定義の例$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](https://reader033.vdocuments.mx/reader033/viewer/2022052619/556600d7d8b42aa6628b489d/html5/thumbnails/32.jpg)
構成定義の例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](https://reader033.vdocuments.mx/reader033/viewer/2022052619/556600d7d8b42aa6628b489d/html5/thumbnails/33.jpg)
コンフィギュレーションから DI コンテナへの変換
![Page 34: Software Development with Symfony](https://reader033.vdocuments.mx/reader033/viewer/2022052619/556600d7d8b42aa6628b489d/html5/thumbnails/34.jpg)
バンドル
![Page 35: Software Development with Symfony](https://reader033.vdocuments.mx/reader033/viewer/2022052619/556600d7d8b42aa6628b489d/html5/thumbnails/35.jpg)
バンドル● Symfony におけるモジュール(パッケージ)● 粗粒度の機能(フィーチャー)の提供単位
Web フレームワーク (FrameworkBundle) Web アプリケーション
● DI コンテナ定義、コンフィギュレーション、クラス、 Web リソース等を束ねたもの
![Page 36: Software Development with Symfony](https://reader033.vdocuments.mx/reader033/viewer/2022052619/556600d7d8b42aa6628b489d/html5/thumbnails/36.jpg)
● エリック・エヴァンス「エリック・エヴァンスのドメイン駆動設計」、翔泳社、 2011 年。
● 江渡 浩一郎「パターン、 Wiki 、 XP ~ 時を超えた創造の原則」、技術評論社、 2009 年。
● クシシュトフ・チャルネッキ、ウールリシュ・ W ・アイセンアッカ「ジェネレーティブプログラミング」、翔泳社、 2008 年。
参考