Frameworks We Live By: Design by day-to-day framework development: Multi-paradigm design in practice
1. PHP Conference JAPAN 2015
October 3 2015
Frameworks We Live By
Design by day-to-day framework development:
Multi-paradigm design in practice
PHP Mentors
KUBO Atsuhiro @iteman
2. Copyright (c) 2015 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
Frameworks We Live By
1.ドメインモデルの設計
マルチパラダイムデザインによるドメイン駆動設計の実践
●
共通性と可変性
●
問題ドメインと解決ドメイン
●
ドメインモデルの設計
解決ドメインの抽象による問題ドメインの再定義
2.フレームワーク開発による設計
3. Copyright (c) 2015 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
久保敦啓 (KUBO Atsuhiro)
●
Programmer, Mentor at @phpmentors,
@piece_framework Project Lead/Developer,
Business Owner.
●
A framework multi-paradigm guy
4. Copyright (c) 2015 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
これまでに作ったフレームワーク
●
Net_UserAgent_Mobile(2003)
HTTP mobile user agent string parser
●
Piece_Unity(2006)
A Web application framework
●
Domain Kata(2014)
Kata for domain models
●
Workflower(2015)
A BPMN 2.0 compliant workflow engine for PHP
5. Copyright (c) 2015 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
1.ドメインモデルの設計
〜マルチパラダイムデザインによるドメイン駆動設計の実践〜
6. Copyright (c) 2015 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
優れた設計というものは、どのよう
な場合であろうと、審美眼、洞察、
経験に依存するのである。
― マルチパラダイムデザイン p.215
7. Copyright (c) 2015 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
Domain-Driven Design: DDD
(Evans 2003)
8. Copyright (c) 2015 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
DDDのアクティビティ
12. Copyright (c) 2015 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
MPDのアクティビティ
13. Copyright (c) 2015 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
マルチパラダイムデザイン
●
James O. "Jim" Coplien氏が提唱するドメイン工学の設計手法
– アプリケーションを再利用可能な問題ドメインのアーキテクチャとそのインス
タンスという構図で認識し、そのリファレンスアーキテクチャの作成に主眼を
置く。ジェネレーティブプログラミングとオーバーラップする。
●
人間の認知モデルに基づく共通性と可変性という観点から問題ドメイ
ンを分析
●
ドメインとドメイン間の関係からなる構造(アーキテクチャ=ドメイ
ンモデル)として問題ドメインを組織化(第1段階のアーキテクチャ)
●
解決ドメインによって支援される抽象を使って問題ドメインの構造を
表現=設計(第2段階のアーキテクチャ)
解決ドメインの抽象を意図的に問題ドメインに組み込む!
14. Copyright (c) 2015 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
マルチパラダイムデザイン
●
“MPD is predicated on analysis, and is rooted
in a model of commonality that concretely
guides choices”
― https://twitter.com/jcoplien/status/645654740911681536
15. Copyright (c) 2015 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
MPDの重要性
●
設計者がモデルを設計することが中心的なアクティビティと
して明示的に位置づけられている。
●
人間の認知モデルに基づく共通性と可変性による設計原理ゆ
え高い普遍性を持つ。
●
現実にある多くの優れたフレームワークにその使用が認めら
れる。すなわち現実を説明できる力を持つ。
例:
●
Symfony(PHP)
●
Ruby on Rails(Ruby)
●
Spring Framework(Java)
●
Boost(C++)
16. Copyright (c) 2015 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
パラダイム
●
世界に関するモデル
●
計算完全性モデル
●
共通性と可変性の配置に関するモデル
=マルチパラダイムデザイン
22. Copyright (c) 2015 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
概念メタファー
●
存在のメタファーの例:
THE MIND IS AN ENTITY
<知力(精神)はひとつの存在物である>
●
THE MIND IS A MACHINE
<知力は機械である>
– My mind just isn't operating today.
<私の頭は今日は全然作動して(=働いて)いない。>
― レトリックと人生 pp.41-42
23. Copyright (c) 2015 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
“レイコフはここから発展して、人間の抽象的
な概念能力は、経験に基づいた具体的・身体的
な認知機構からのメタファー的拡張によって可
能になっていると主張し、心身二元論に基づい
た西洋哲学の伝統に対する批判を行ってい
る。”
― ジョージ・レイコフ - Wikipedia
概念メタファー
24. Copyright (c) 2015 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
問題ドメイン
●
システムやソフトウェアの当面の関心のある領
域。
例:会計、販売管理、生産管理、ソースコード管
理、Webアプリケーション、オブジェクトリレー
ショナルマッピング、バリデーション、ワークフ
ロー
48. Copyright (c) 2015 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
Coding We Live By
1.ドメインモデルの設計
マルチパラダイムデザインによるドメイン駆動設計の実践
●
共通性と可変性
●
問題ドメインと解決ドメイン
●
ドメインモデルの設計
解決ドメインの抽象による問題ドメインの再定義
2.フレームワーク開発による設計
3.コーディングによる設計
49. Copyright (c) 2015 KUBO Atsuhiro <kubo@iteman.jp>, All rights reserved.
Code the Domain!
You are a Domain Coder!
50. 参考文献
●
(Coplien 1998) Coplien, James O. Multi-Paradigm Design for C++ Reading, MA: Addision-
Wesley, 1998. 『マルチパラダイムデザイン』(金沢典子/羽生田栄一/平鍋健児訳、ピアソン
エデュケーション、2001、ISBN4894712989)
●
(Lakof and Johnson 1980) Lakof, George and Johnson, Mark Metaphors We Live By,
Chicago: University of Chicago Press, 1980. 『レトリックと人生』(渡部昇一/楠瀬淳三/下
谷和幸訳、大修館書店、1986、ISBN4469211257)
●
George Lakof - Wikipedia, the free encyclopedia
●
ジョージ・レイコフ – Wikipedia
●
認知言語学 - Wikipedia