Your SlideShare is downloading. ×
0
Software Development with Symfony
Software Development with Symfony
Software Development with Symfony
Software Development with Symfony
Software Development with Symfony
Software Development with Symfony
Software Development with Symfony
Software Development with Symfony
Software Development with Symfony
Software Development with Symfony
Software Development with Symfony
Software Development with Symfony
Software Development with Symfony
Software Development with Symfony
Software Development with Symfony
Software Development with Symfony
Software Development with Symfony
Software Development with Symfony
Software Development with Symfony
Software Development with Symfony
Software Development with Symfony
Software Development with Symfony
Software Development with Symfony
Software Development with Symfony
Software Development with Symfony
Software Development with Symfony
Software Development with Symfony
Software Development with Symfony
Software Development with Symfony
Software Development with Symfony
Software Development with Symfony
Software Development with Symfony
Software Development with Symfony
Software Development with Symfony
Software Development with Symfony
Software Development with Symfony
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Software Development with Symfony

2,724

Published on

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

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

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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

×