2012/4/7 第 3 回 関西 PHP 勉強会 Symfony によるソフトウェア開発入門           PHP メンターズ           久保敦啓 (KUBO Atsuhiro)
久保敦啓 (KUBO Atsuhiro)●    株式会社アイテマン 代表取締役●    Piece Project プロジェクトリード●    PHP メンターズ●    Twitter @iteman
Piece Framework●    PHP フレームワーク、ツール●    オープンソースソフトウェア●    Piece Project                  開発者募集中                  スポンサー募集中
Piece Framework●    Twitter @piece_framework●    ソースコード    https://github.com/piece●    Web サイト    http://piece-framework....
PHP メンターズ●    Twitter @phpmentors●    ソースコード    https://github.com/phpmentors-jp●    Web サイト・ブログ    http://phpmentors.jp/●...
良いソフトウェアとは?
“ ソフトウェアの核心は、ドメインに関係した問題をユーザのために解決する能力である。”— エリック・エヴァンスのドメイン駆動設計
巨人の肩の上に立つ
例えば…●    開発プロセス・方法論●    アーキテクチャパターン・スタイル●    デザインパターン●    フレームワーク●    ライブラリ●    …
アーキテクチャパターン・スタイル●    モデル・ビュー・コントローラ●    レイヤ●    REST●    CQRS●    DCI●    …
“ 使い方を機能として実装する”— パターン、 Wiki 、 XP
ドメインとは?
ドメインモデル
レイヤーアーキテクチャとドメインモデルPresentation    Controllers      Views                                           Infrastructure        ...
ドメイン駆動設計
ドメイン駆動設計とは?●    ドメインモデルは、ドメイン知識を深めながら反復    的( iterative )に深化させていく。●    ドメインモデルは、開発者とドメイン知識をもつ人    (ユーザ、専門家等)との間の共通言語となるよう ...
代表的なパターン●    ユビキタス言語●    モデル駆動設計●    実践的モデラー
Symfony の歴史
Symfony の特徴
Symfony の特徴●    DI コンテナ●    コンフィギュレーション●    バンドル
DI コンテナ
DI コンテナ●    Dependency Injection                  依存関係逆転の原則 (DIP: The Dependency            Inversion Principle)●    コンポー...
DependencyInjection コンポーネント●    複数の定義フォーマット              YAML, XML, PHP●    複数のインジェクション方法              コンストラクタ、セッター、フィール...
DI コンテナ定義の例...services:  piece_questetra.questetra_client:    scope: prototype    class: "%piece_questetra.questetra_clien...
コンフィギュレーション
コンフィギュレーション●    問題空間の言語              実装コンポーネントの構造に影響を受けない●    ドメイン特化言語              DSL: Domain-Specific Language      ...
Configuration コンポーネント●    グラマー言語 (PHP) による文法定義●    複数の保存フォーマット                YAML, XML, PHP●    DependencyInjection コンポー...
文法定義の例$treeBuilder->root(piece_questetra)    ->children()    ...        ->arrayNode(authentication)            ->isRequire...
構成定義の例piece_questetra:  context_root: "%piece_questetra.context_root%"  authentication:    user_id: "%piece_questetra.user...
コンフィギュレーションから DI コンテナへの変換
バンドル
バンドル●    Symfony におけるモジュール(パッケージ)●    粗粒度の機能(フィーチャー)の提供単位                Web フレームワーク (FrameworkBundle)                We...
参考●    エリック・エヴァンス「エリック・エヴァンスのドメイン駆動設計」、翔    泳社、 2011 年。●    江渡 浩一郎「パターン、 Wiki 、 XP ~ 時を超えた創造の原則」、技術評論    社、 2009 年。●    クシ...
Software Development with Symfony
Software Development with Symfony
Software Development with Symfony
Upcoming SlideShare
Loading in...5
×

Software Development with Symfony

2,761

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,761
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
6
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Software Development with Symfony

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

    Clipping is a handy way to collect important slides you want to go back to later.

×