More Related Content Similar to Symfony2でより良いソフトウェアを作るために
Similar to Symfony2でより良いソフトウェアを作るために (20) More from Atsuhiro Kubo (17) Symfony2でより良いソフトウェアを作るために1. 第 4 回 Symfony2 勉強会
Symfony2 で
より良いソフトウェア
を作るために
株式会社アイテマン
久保敦啓
@iteman
3. iteman
株式会社アイテマン 代表取締役
Piece Project プロジェクトリード
Twitter @iteman
4. Piece Framework
PHP のアプリケーションフレームワーク
オープンソースソフトウェア
New BSD License
Eclipse Public License
5. 歴史
2005 Stagehand_TestRunner
2006 Piece_Unity, Piece_Flow
2009 MakeGood
2011 ???
10. Symfony2 の特徴
バンドル
コンフィギュレーション
サービスコンテナ (DI コンテナ )
機能テスト
独立したドメインオブジェクト
etc...
11. バンドル
モジュールシステムの構成単位
フィーチャの提供単位
クラス、コントローラ、 Web リソース等を
束ねたもの
外部のモジュールとの統合レイヤ
セマンティックコンフィギュレーションの提供
他のバンドルの拡張の提供
自身のバンドルの拡張ポイントの提供
13. バンドルの拡張
FrameworkBundle
kernel.listener
...
web_profiler.debug_toolbar assetic.request_listener
WebProfilerBundle AsseticBundle
14. 既存のモジュールシステム
PEAR パッケージ
Phar
Debian パッケージ
OSGi バンドル
etc...
15. バンドル設計の原則
高い凝集度と低い結合度
一般的なモジュール設計の原則
パッケージ設計の原則
— アジャイルソフトウェア開発の奥義
再利用・リリース等価の原則など 6 つの原則
ドメインの概念
— エリック・エヴァンスのドメイン駆動設計
16. サービスコンテナ
Dependency Injection
依存関係逆転の原則
— アジャイルソフトウェア開発の奥義
コンポーネント間の疎結合化
テスタビリティの向上
コンポーネント構成知識の保存と可視化
軽量プログラミング言語における
DI コンテナの価値
19. トランスフォーメーション
Problem Space Solution Space
Parse Populate
----------
----------
----------
----------
------
Service Containers
Semantic Service
Configurations Definitions
(YAML,XML,PHP) (Objects)
----------
----------
Parse ----------
Service
---------- Container
------
Configurations
(YAML,XML,PHP)
20. ドメイン特化言語
DSL:Domain Specific Languages
問題空間の言語
ドメインに特化した記法を持つ言語
言語ワークベンチ
コンフィグレーション DSL
式 DSL, グラフィカル DSL
21. ドメイン特化言語の開発
コンフィギュレーション DSL
YAML
式 DSL, グラフィカル DSL
言語ワークベンチ
Lexer/Parser Generators
23. テストの対象
ユーザ側からみた Web アプリの機能
機能に対するユースケースの粒度
ルーティング
ページフロー
入力・出力
バリデーション
24. 独立したドメインオブジェクト
Pure PHP オブジェクト
バリデーションや OR マッピングから
の高い独立性
フレームワークからの影響を極小化
31. ドメイン駆動設計の要点
ドメインモデルは、ドメイン知識を深めなが
ら反復的( iterative )に深化させていく
ドメインモデルが、開発者とドメイン知識を
もつ人(ユーザ、専門家等)との間の共通言
語となるようにする
ドメインモデルと実装コードとがきちんと対
応付けられるようにする
—DomainDriven Design のエッセンス
32. 代表的なパターン
ユビキタス言語
モデル駆動設計
≠ オブジェクト指向
ドメイン特化言語
実践的モデラー
34. プロセス、技法、パラダイム
アジャイルプロセス (Scrum, XP, …)
テスト駆動開発 (TDD:TestDriven Development)
SOLID
ビヘイビア駆動開発 (BDD:BehaviorDriven Development)
リファクタリング
35. SOLID
単一責任の原則
SRP:The Single Responsibility Principle
オープン・クローズドの原則
OCP:The OpenClosed Principle
リスコフの置換原則
LSP:The Liskov Substitution Principle
インタフェース分離の原則
ISP:The Interface Segregation Principle
依存関係逆転の原則
DIP:The Dependency Inversion Principle
36. プロセス、技法、パラダイム
オブジェクト指向プログラミング
関数プログラミング
ジェネリックプログラミング
アスペクト指向プログラミング
メタプログラミング
37. プロセス、技法、パラダイム
マルチパラダイムデザイン
ジェネレーティブプログラミング
プロダクトライン
Software Factories
インテンショナルプログラミング
言語指向プログラミング
言語ワークベンチ
Lean Software Architecture
38. プロセス、技法、パラダイム
レイヤ化アーキテクチャ
モデル・ビュー・コントローラ
DCI: Data, Context, and Interaction
40. 参考
『エリック・エヴァンスのドメイン駆動設計 (IT
Architects’Archive ソフトウェア開発の実践 ) 』、翔泳
社、 2011 年、 ISBN 9784798121963
[ 技術講座 ] DomainDriven Design のエッセンス 第 1
回、 http://www.ogis
ri.co.jp/otc/hiroba/technical/DDDEssence/chap1.html
『アジャイルソフトウェア開発の奥義 第 2 版 オブジェクト指向開発の神
髄と匠の技』、ソフトバンククリエイティブ、 2008 年、 ISBN 978
4797347784
『ジェネレーティブプログラミング (IT Architects’Archive
CLASSIC MODER) 』、翔泳社、 2008 年、 ISBN 9784798113319
The Symfony2 Book,
http://symfony.com/doc/current/book/index.html