SlideShare a Scribd company logo
Teddy Chen
teddy@teddysoft.tw
http://teddy-chen-tw.blogspot.tw/
Sep. 03 2020 @ Asian PLoP 2020
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
設計就是解決問題
Copyright@2020 Teddysoft
只要解決問題(功能需求)
就好了嗎?
Copyright@2020 Teddysoft
設計就是解決問題並滿足
所關心的非功能需求
Copyright@2020 Teddysoft
設計困難嗎?
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
Context
Form
Context
FormOr
設計就是決定Form與Context的邊界
(設計就是決定你要設計什麼)
Copyright@2020 Teddysoft 圖片搜尋自Google
Context
Before
MachineProblem
force
force
Copyright@2020 Teddysoft
Worl
d
Resulting
Context
Solution
force
force
force
After
force
Copyright@2020 Teddysoft
《節錄自網路》 《節錄自網路》
Copyright@2020 Teddysoft
設計就是解決問題,好的設計就
是Form與Context的良好適關係,
不能單獨只看Form本身
Copyright@2020 Teddysoft
一再重複出現的東西、
事件、現象,就稱為模式
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
A pattern is a solution to a problem
in a context.
Copyright@2020 Teddysoft
A pattern is a proven solution to a
recurring problem in a specific
context, and more.
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
World
Context
Problem Domain
(Requirement, What)
Solution Domain
(How, How to, How much)
Machine
Problem
force force
force
模式讓設計問
題變成選擇題
Copyright@2020 Teddysoft
模式是一種重複使用知識的方法,它將
設計問題簡化成選擇題。套用模式解決
問題便是要釐清如何選擇模式。
Copyright@2020 Teddysoft
• Big Up Front Design (BUFD) Style
– Code first + refactoring tomorrow
– Top-down approach
• Just-In-Time Design (JITD) Style
– [Test + code + refactor] cycle
– Bottom-up approach
Copyright@2020 Teddysoft
因為需求經常改變,BUFD常常
變成Over Design,形成浪費
Copyright@2020 Teddysoft
JITD是一種推遲決策的思維,理
論上可以減少浪費。但實際上真
正的JITD非常困難,通常只有練
過的叔叔&阿姨們才有辦法做到
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft Source:《Test-Driven Development》
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
Top-down
Bottom-up
Copyright@2020 Teddysoft
設計是一種由上而下的過程,套用
模式也是如此。問題在於如何展開
這個由上而下的過程。
Copyright@2020 Teddysoft
一個Pattern解決一個特定的(小)問題
好幾個Pattern一起使用,稱為Pattern
Language,便可解決較大的問題
Copyright@2020 Teddysoft
Pattern → 單字
Pattern Language →句子
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
source: https://reurl.cc/5q2n9V
慎選第一個
Pattern
P1
Context1
P2
Context2
套Pattern A
P3
Context3
如果Pattern A不合,
改套 Pattern B
P4
Context4
若有未被解的問題,
套下一個 Pattern C
Context 1的
Resulting Context
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
設計的展開過程藉由先定義整
體再逐步分化,讓系統成形
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
A pattern is a process and a thing.
Copyright@2020 Teddysoft
• 分散式行動
• 單一心智
• 不須繁複設計圖
• 一次一個模式的展開過程
• 修復
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
《畫面節錄自電影鹿鼎記》
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
請看 Miro
Copyright@2020 Teddysoft 《http://goo.gl/G3IjMW》
• 搞笑談軟工部落格
– http://teddy-chen-tw.blogspot.com
• 搞笑談軟工Facebook
– https://www.facebook.com/groups/teddy.tw
• 泰迪軟體官方網站
– http://teddysoft.tw
Copyright@2020 Teddysoft

More Related Content

What's hot

PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説
do_aki
 
Openlink Virtuoso v01
Openlink Virtuoso v01Openlink Virtuoso v01
Openlink Virtuoso v01
Satoshi Kume
 
serviceクラスをやめようサブクラスを使おう
serviceクラスをやめようサブクラスを使おうserviceクラスをやめようサブクラスを使おう
serviceクラスをやめようサブクラスを使おう
よしだ あつし
 
ちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てるちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てる
増田 亨
 
技術紹介: S2E: Selective Symbolic Execution Engine
技術紹介: S2E: Selective Symbolic Execution Engine技術紹介: S2E: Selective Symbolic Execution Engine
技術紹介: S2E: Selective Symbolic Execution Engine
Asuka Nakajima
 
TED Talk世界頂尖演講者9大關鍵秘訣(Talk Like TED:The 9 Public-Speaking Secrets of the Worl...
TED Talk世界頂尖演講者9大關鍵秘訣(Talk Like TED:The 9 Public-Speaking Secrets of the Worl...TED Talk世界頂尖演講者9大關鍵秘訣(Talk Like TED:The 9 Public-Speaking Secrets of the Worl...
TED Talk世界頂尖演講者9大關鍵秘訣(Talk Like TED:The 9 Public-Speaking Secrets of the Worl...
周建良 Zhou Jian Liang
 
實踐 Clean Architecture(實作高可用性的軟件架構)
實踐 Clean Architecture(實作高可用性的軟件架構)實踐 Clean Architecture(實作高可用性的軟件架構)
實踐 Clean Architecture(實作高可用性的軟件架構)
Gelis Wu
 
なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?
ichirin2501
 
ClojureではじめるSTM入門
ClojureではじめるSTM入門ClojureではじめるSTM入門
ClojureではじめるSTM入門sohta
 
[教材] 例外處理設計與重構實作班201309
[教材] 例外處理設計與重構實作班201309[教材] 例外處理設計與重構實作班201309
[教材] 例外處理設計與重構實作班201309
teddysoft
 
價值主張設計:如何設計?How to design your Value Proposition?
價值主張設計:如何設計?How to design your Value Proposition?價值主張設計:如何設計?How to design your Value Proposition?
價值主張設計:如何設計?How to design your Value Proposition?
士杰 戴
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
増田 亨
 
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にJava SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心に
Taku Miyakawa
 
Quine・難解プログラミングについて
Quine・難解プログラミングについてQuine・難解プログラミングについて
Quine・難解プログラミングについて
mametter
 
MS SQL 2012 安裝與基本使用教學
MS SQL 2012 安裝與基本使用教學MS SQL 2012 安裝與基本使用教學
MS SQL 2012 安裝與基本使用教學
Yuan Chiu
 
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
増田 亨
 
Laravel の paginate は一体何をやっているのか
Laravel の paginate は一体何をやっているのかLaravel の paginate は一体何をやっているのか
Laravel の paginate は一体何をやっているのか
Shohei Okada
 
ソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考えるソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考える
増田 亨
 
ダブル配列の豆知識
ダブル配列の豆知識ダブル配列の豆知識
ダブル配列の豆知識
s5yata
 
ゲームアプリの数学@GREE GameDevelopers' Meetup
ゲームアプリの数学@GREE GameDevelopers' Meetupゲームアプリの数学@GREE GameDevelopers' Meetup
ゲームアプリの数学@GREE GameDevelopers' Meetup
gree_tech
 

What's hot (20)

PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説
 
Openlink Virtuoso v01
Openlink Virtuoso v01Openlink Virtuoso v01
Openlink Virtuoso v01
 
serviceクラスをやめようサブクラスを使おう
serviceクラスをやめようサブクラスを使おうserviceクラスをやめようサブクラスを使おう
serviceクラスをやめようサブクラスを使おう
 
ちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てるちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てる
 
技術紹介: S2E: Selective Symbolic Execution Engine
技術紹介: S2E: Selective Symbolic Execution Engine技術紹介: S2E: Selective Symbolic Execution Engine
技術紹介: S2E: Selective Symbolic Execution Engine
 
TED Talk世界頂尖演講者9大關鍵秘訣(Talk Like TED:The 9 Public-Speaking Secrets of the Worl...
TED Talk世界頂尖演講者9大關鍵秘訣(Talk Like TED:The 9 Public-Speaking Secrets of the Worl...TED Talk世界頂尖演講者9大關鍵秘訣(Talk Like TED:The 9 Public-Speaking Secrets of the Worl...
TED Talk世界頂尖演講者9大關鍵秘訣(Talk Like TED:The 9 Public-Speaking Secrets of the Worl...
 
實踐 Clean Architecture(實作高可用性的軟件架構)
實踐 Clean Architecture(實作高可用性的軟件架構)實踐 Clean Architecture(實作高可用性的軟件架構)
實踐 Clean Architecture(實作高可用性的軟件架構)
 
なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?
 
ClojureではじめるSTM入門
ClojureではじめるSTM入門ClojureではじめるSTM入門
ClojureではじめるSTM入門
 
[教材] 例外處理設計與重構實作班201309
[教材] 例外處理設計與重構實作班201309[教材] 例外處理設計與重構實作班201309
[教材] 例外處理設計與重構實作班201309
 
價值主張設計:如何設計?How to design your Value Proposition?
價值主張設計:如何設計?How to design your Value Proposition?價值主張設計:如何設計?How to design your Value Proposition?
價值主張設計:如何設計?How to design your Value Proposition?
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
 
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にJava SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心に
 
Quine・難解プログラミングについて
Quine・難解プログラミングについてQuine・難解プログラミングについて
Quine・難解プログラミングについて
 
MS SQL 2012 安裝與基本使用教學
MS SQL 2012 安裝與基本使用教學MS SQL 2012 安裝與基本使用教學
MS SQL 2012 安裝與基本使用教學
 
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
 
Laravel の paginate は一体何をやっているのか
Laravel の paginate は一体何をやっているのかLaravel の paginate は一体何をやっているのか
Laravel の paginate は一体何をやっているのか
 
ソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考えるソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考える
 
ダブル配列の豆知識
ダブル配列の豆知識ダブル配列の豆知識
ダブル配列の豆知識
 
ゲームアプリの数学@GREE GameDevelopers' Meetup
ゲームアプリの数学@GREE GameDevelopers' Meetupゲームアプリの数学@GREE GameDevelopers' Meetup
ゲームアプリの数学@GREE GameDevelopers' Meetup
 

More from teddysoft

Dci vs aggregate_dddtw_2021-0.3-preview
Dci vs aggregate_dddtw_2021-0.3-previewDci vs aggregate_dddtw_2021-0.3-preview
Dci vs aggregate_dddtw_2021-0.3-preview
teddysoft
 
Agile the timeless way of software development-2019-05-17-v1.2-published
Agile the timeless way of software development-2019-05-17-v1.2-publishedAgile the timeless way of software development-2019-05-17-v1.2-published
Agile the timeless way of software development-2019-05-17-v1.2-published
teddysoft
 
當Scrum遇到Pattern
當Scrum遇到Pattern當Scrum遇到Pattern
當Scrum遇到Pattern
teddysoft
 
說出一嘴好設計 1.1
說出一嘴好設計 1.1說出一嘴好設計 1.1
說出一嘴好設計 1.1
teddysoft
 
跟著Teddy讀Pattern
跟著Teddy讀Pattern跟著Teddy讀Pattern
跟著Teddy讀Pattern
teddysoft
 
如何學好設計模式
如何學好設計模式如何學好設計模式
如何學好設計模式
teddysoft
 
Bdd atdd sbe_tdd_ddd_published
Bdd atdd sbe_tdd_ddd_publishedBdd atdd sbe_tdd_ddd_published
Bdd atdd sbe_tdd_ddd_published
teddysoft
 
重構三兩事
重構三兩事重構三兩事
重構三兩事
teddysoft
 
了解模式讓你更敏捷 (C C Agile 活動分享)
了解模式讓你更敏捷 (C C Agile 活動分享)了解模式讓你更敏捷 (C C Agile 活動分享)
了解模式讓你更敏捷 (C C Agile 活動分享)
teddysoft
 
從五個小故事看敏捷開發精神
從五個小故事看敏捷開發精神從五個小故事看敏捷開發精神
從五個小故事看敏捷開發精神teddysoft
 
軟體開發成功的秘訣
軟體開發成功的秘訣軟體開發成功的秘訣
軟體開發成功的秘訣
teddysoft
 
[演講] Scrum導入經驗分享
[演講] Scrum導入經驗分享[演講] Scrum導入經驗分享
[演講] Scrum導入經驗分享
teddysoft
 
那一夜我們說Pattern design patterns 20周年-published
那一夜我們說Pattern design patterns 20周年-published那一夜我們說Pattern design patterns 20周年-published
那一夜我們說Pattern design patterns 20周年-published
teddysoft
 
好設計如何好 @ C.C. Agile #14
好設計如何好 @ C.C. Agile #14好設計如何好 @ C.C. Agile #14
好設計如何好 @ C.C. Agile #14
teddysoft
 
Design Patterns這樣學就會了:入門班 Day1 教材
Design Patterns這樣學就會了:入門班 Day1 教材Design Patterns這樣學就會了:入門班 Day1 教材
Design Patterns這樣學就會了:入門班 Day1 教材teddysoft
 
搞懂Java例外處理的難題:Checked與Unchecked Exceptions不再是問題
搞懂Java例外處理的難題:Checked與Unchecked Exceptions不再是問題搞懂Java例外處理的難題:Checked與Unchecked Exceptions不再是問題
搞懂Java例外處理的難題:Checked與Unchecked Exceptions不再是問題
teddysoft
 
Java 例外處理壞味道與重構技術
Java 例外處理壞味道與重構技術Java 例外處理壞味道與重構技術
Java 例外處理壞味道與重構技術
teddysoft
 
模式入門第一堂課: 30分鐘寫出一個模式
模式入門第一堂課: 30分鐘寫出一個模式模式入門第一堂課: 30分鐘寫出一個模式
模式入門第一堂課: 30分鐘寫出一個模式teddysoft
 

More from teddysoft (18)

Dci vs aggregate_dddtw_2021-0.3-preview
Dci vs aggregate_dddtw_2021-0.3-previewDci vs aggregate_dddtw_2021-0.3-preview
Dci vs aggregate_dddtw_2021-0.3-preview
 
Agile the timeless way of software development-2019-05-17-v1.2-published
Agile the timeless way of software development-2019-05-17-v1.2-publishedAgile the timeless way of software development-2019-05-17-v1.2-published
Agile the timeless way of software development-2019-05-17-v1.2-published
 
當Scrum遇到Pattern
當Scrum遇到Pattern當Scrum遇到Pattern
當Scrum遇到Pattern
 
說出一嘴好設計 1.1
說出一嘴好設計 1.1說出一嘴好設計 1.1
說出一嘴好設計 1.1
 
跟著Teddy讀Pattern
跟著Teddy讀Pattern跟著Teddy讀Pattern
跟著Teddy讀Pattern
 
如何學好設計模式
如何學好設計模式如何學好設計模式
如何學好設計模式
 
Bdd atdd sbe_tdd_ddd_published
Bdd atdd sbe_tdd_ddd_publishedBdd atdd sbe_tdd_ddd_published
Bdd atdd sbe_tdd_ddd_published
 
重構三兩事
重構三兩事重構三兩事
重構三兩事
 
了解模式讓你更敏捷 (C C Agile 活動分享)
了解模式讓你更敏捷 (C C Agile 活動分享)了解模式讓你更敏捷 (C C Agile 活動分享)
了解模式讓你更敏捷 (C C Agile 活動分享)
 
從五個小故事看敏捷開發精神
從五個小故事看敏捷開發精神從五個小故事看敏捷開發精神
從五個小故事看敏捷開發精神
 
軟體開發成功的秘訣
軟體開發成功的秘訣軟體開發成功的秘訣
軟體開發成功的秘訣
 
[演講] Scrum導入經驗分享
[演講] Scrum導入經驗分享[演講] Scrum導入經驗分享
[演講] Scrum導入經驗分享
 
那一夜我們說Pattern design patterns 20周年-published
那一夜我們說Pattern design patterns 20周年-published那一夜我們說Pattern design patterns 20周年-published
那一夜我們說Pattern design patterns 20周年-published
 
好設計如何好 @ C.C. Agile #14
好設計如何好 @ C.C. Agile #14好設計如何好 @ C.C. Agile #14
好設計如何好 @ C.C. Agile #14
 
Design Patterns這樣學就會了:入門班 Day1 教材
Design Patterns這樣學就會了:入門班 Day1 教材Design Patterns這樣學就會了:入門班 Day1 教材
Design Patterns這樣學就會了:入門班 Day1 教材
 
搞懂Java例外處理的難題:Checked與Unchecked Exceptions不再是問題
搞懂Java例外處理的難題:Checked與Unchecked Exceptions不再是問題搞懂Java例外處理的難題:Checked與Unchecked Exceptions不再是問題
搞懂Java例外處理的難題:Checked與Unchecked Exceptions不再是問題
 
Java 例外處理壞味道與重構技術
Java 例外處理壞味道與重構技術Java 例外處理壞味道與重構技術
Java 例外處理壞味道與重構技術
 
模式入門第一堂課: 30分鐘寫出一個模式
模式入門第一堂課: 30分鐘寫出一個模式模式入門第一堂課: 30分鐘寫出一個模式
模式入門第一堂課: 30分鐘寫出一個模式
 

Pattern based problem solving-published