Contenu connexe
Similaire à Software Development with Symfony
Similaire à Software Development with Symfony (20)
Plus de Atsuhiro Kubo (17)
Software Development with Symfony
- 1. 2012/4/7 第 3 回 関西 PHP 勉強会
Symfony による
ソフトウェア開発入門
PHP メンターズ
久保敦啓 (KUBO Atsuhiro)
- 3. Piece Framework
●
PHP フレームワーク、ツール
●
オープンソースソフトウェア
●
Piece Project
開発者募集中
スポンサー募集中
- 4. Piece Framework
●
Twitter @piece_framework
●
ソースコード
https://github.com/piece
●
Web サイト
http://piece-framework.com/
- 5. PHP メンターズ
●
Twitter @phpmentors
●
ソースコード
https://github.com/phpmentors-jp
●
Web サイト・ブログ
http://phpmentors.jp/
●
有償トレーニングサービス始めました。
- 9. 例えば…
●
開発プロセス・方法論
●
アーキテクチャパターン・スタイル
●
デザインパターン
●
フレームワーク
●
ライブラリ
●
…
- 16. ドメイン駆動設計とは?
●
ドメインモデルは、ドメイン知識を深めながら反復
的( iterative )に深化させていく。
●
ドメインモデルは、開発者とドメイン知識をもつ人
(ユーザ、専門家等)との間の共通言語となるよう
にする。
●
ドメインモデルは、実装コードときちんと対応付け
られるようにする。
—Domain-Driven Design のエッセンス
- 24. DI コンテナ
●
Dependency Injection
依存関係逆転の原則 (DIP: The Dependency
Inversion Principle)
●
コンポーネント間の疎結合化
●
テスタビリティの向上
●
コンポーネント構成知識の集約
コンポーネント構成定義言語
- 26. DependencyInjection コンポーネント
●
複数の定義フォーマット
YAML, XML, PHP
●
複数のインジェクション方法
コンストラクタ、セッター、フィールド
●
ファクトリクラス・サービス
●
タグによる拡張ポイント・拡張
●
コンパイル時の変形・最適化
- 27. 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%"
- 29. コンフィギュレーション
●
問題空間の言語
実装コンポーネントの構造に影響を受けない
●
ドメイン特化言語
DSL: Domain-Specific Language
コンフィギュレーション DSL
- 30. Configuration コンポーネント
●
グラマー言語 (PHP) による文法定義
●
複数の保存フォーマット
YAML, XML, PHP
●
DependencyInjection コンポーネントとの統合
DI エクステンション毎のスロット
●
複数回の読み込み
例)構成ファイルとコマンドライン引数のマージ
- 31. 文法定義の例
$treeBuilder->root('piece_questetra')
->children()
...
->arrayNode('authentication')
->isRequired()
->children()
->scalarNode('user_id')
->isRequired()
->cannotBeEmpty()
->end()
->scalarNode('password')
->isRequired()
->cannotBeEmpty()
->end()
->end()
->end()
->end();
- 35. バンドル
●
Symfony におけるモジュール(パッケージ)
●
粗粒度の機能(フィーチャー)の提供単位
Web フレームワーク (FrameworkBundle)
Web アプリケーション
●
DI コンテナ定義、コンフィギュレーション、
クラス、 Web リソース等を束ねたもの
- 36. 参考
●
エリック・エヴァンス「エリック・エヴァンスのドメイン駆動設計」、翔
泳社、 2011 年。
●
江渡 浩一郎「パターン、 Wiki 、 XP ~ 時を超えた創造の原則」、技術評論
社、 2009 年。
●
クシシュトフ・チャルネッキ、ウールリシュ・ W ・アイセンアッカ「ジェ
ネレーティブプログラミング」、翔泳社、 2008 年。