Software Development with Symfony

3,080 views

Published on

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

No Downloads
Views
Total views
3,080
On SlideShare
0
From Embeds
0
Number of Embeds
1,519
Actions
Shares
0
Downloads
7
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 年。

×