SlideShare a Scribd company logo
1 of 78
Teddy Chen
teddy@teddysoft.tw
http://teddy-chen-tw.blogspot.tw/
March 10 2016
Teddy Chen
teddy@teddysoft.tw
http://teddy-chen-tw.blogspot.tw/
March 10 2016
Rename
Copyright@2012-2016 Teddysoft
撒嬌
蓋布袋 舔手
玩襪子
2015年1月領養Eiffel
每天看到好多
需要幫助的貓
謝謝鈦坦科技的 Kevin
Kevin
無等待贊助
節育之貓
由
由泰迪軟體代捐
謝謝各位哥哥、姐姐,
讓更多貓咪獲得幸福
Copyright@2012-2016 Teddysoft
http://goo.gl/6uqzes
B
A
• Refactoring (Noun )
– A change made to the internal structure of
software to make it easier to understand and
cheaper to modify without changing its observable
behavior. (對軟體內部結構的一種改變,目的在不改動軟體可察覺行
為的前提之下,提高其可理解性並降低修改成本。)
• Refactor (Verb)
– To restructure software by applying a series of
refactoring without changing its observable
behavior. (在不改變軟體可察覺行為的前提之下使用一系列重構方法
調整軟體結構 。)
Copyright@2012-2016 Teddysoft Source:《Refactoring》
在不改變程式外在行為的前提之下,
改變程式內部結構以提升設計品質
Copyright@2012-2016 Teddysoft
Before refactoring After refactoring
All programming is maintenance
programming, Dave Thomas
Copyright@2012-2016 Teddysoft
http://www.artima.com/intv/dry.html
菩
提
本
無
樹
明
鏡
亦
非
台
本
來
無
一
物
何
處
惹
塵
埃
神界
Code
是
菩
提
樹
CI
如
明
鏡
台
時
時
跑
測
試
勿
使
客
戶
哀
人界
Copyright@2012-2016 Teddysoft Source http://goo.gl/roc09w
Copyright@2012-2016 Teddysoft
3
2
4
在不改變程式外在行為的前提之下,
改變程式內部結構以提升設計品質
1
5
如何確認? 如何定義?
怎麼改? 哪些結構可以改? 品質的提升目標為何?
6 為什麼要以不改變程
式外在行為當作前提?
Copyright@2012-2016 Teddysoft
3
2
4
在不改變程式外在行為的前提之下,
改變程式內部結構以提升設計品質
1
5
如何確認? 如何定義?
怎麼改? 哪些結構可以改? 品質的提升目標為何?
6 為什麼要以不改變程
式外在行為當作前提?
if 1 == 1 then S1 else S2
Copyright@2012-2016 Teddysoft
開什麼玩笑!
太難
Ref. : https://goo.gl/sBYyAg
1
• Denotational semantics
• Operational semantics
• Axiomatic semantics
Copyright@2012-2016 Teddysoft
Copyright@2012-2016 Teddysoft
Replace semantics proven
with scenario-based tests
聊天話題1:
用測試定義行為有何優缺點?有無替代方案?
Copyright@2012-2016 Teddysoft
Copyright@2012-2016 Teddysoft
Package
Class
Method
Block
Statement
Variable
作用在不同結構上的重構,
產生不同層次的設計改善
Common program
constructs to be
coded & refactored
• Rename
• Introduce Assertion
• Extract Method
• Move Method
• Extract Class
• Form Template Method
• Separate Domain from Presentation
2
Copyright@2012-2016 Teddysoft
程式結構有大有小,
重構亦然
A change made to the internal structure
of software to make it easier to
understand and cheaper to modify
without changing its observable behavior.
較易理解,較低修改成本
Copyright@2012-2016 Teddysoft
3
Copyright@2012-2016 Teddysoft
只有「easier to understand and
cheaper to modify」這兩個目標,
會不會太小、太一般化了?
Understandability
Modifiability
Low Coupling
High Cohesion
OO Concept
OO Principle
Design Pattern
Architecture
 Abstraction
 Information hiding
 Polymorphism
 Responsibility
assignment
 Indirection
 Separation of concerns
 Program to an interface,
not an implementation
 Favor object composition
over class inheritance
 Single-responsibility
 Open-closed
 Liskov substitution
 Interface-segregation
 Dependency-inversion
 Don't repeat yourself,
Single choice, One and
only once
Copyright@2012-2016 Teddysoft
Copyright@2012-2016 Teddysoft
重構有大有小,
重構目標亦然
民意調查:
重構是一種模式(Pattern)嗎?
Copyright@2012-2016 Teddysoft
• 設計模式
– Singleton, Command, Proxy, Adapter, Model-
View-Controller, etc.
• 重構
– Rename, Introduce Assertion, Extract
Method, Move Method, Extract Class, Form
Template Method, Separate Domain from
Presentation, etc.
Copyright@2012-2016 Teddysoft
• 名詞片語 (Noun-phrase)
– 描述模式所建立或產生的結果
– 例子:Singleton, Command, Model-View-
Controller
• 動詞片語 (Verb-phrase)
– 給定一個指令,描述如何達到模式解決方案所要
求的狀態
– 例子:Don’t Talk to Strangers, Separate
Material Preparation from Integration
Copyright@2012-2016 Teddysoft
Copyright@2012-2016 Teddysoft Source:《The Timeless Way of Building》
http://goo.gl/tS13cE
聊天話題2:
如果重構是一種模式,為什麼重構用動詞而
不像大部份設計模式採用名詞?
Copyright@2012-2016 Teddysoft
• Make you instant expert
• Eliminate the need for intelligence and
taste
• Eliminate the need to think
• Tell you how exactly how to adapt the
solution to your context
Copyright@2012-2016 Teddysoft
Source: Asian PLoP 2016 by Joseph
Yoder and Rebecca Wirfs-Brock
Copyright@2012-2016 Teddysoft
重構 相反重構
Extract Method Inline Method
Add Parameter Remove Parameter
Collapse Hierarchy Extract Superclass, Extract Subclass
Extract Class Inline Class
Hide Delegate Remove Middle Man
Pull Up Field Push Down Field
Replace Inheritance with Delegation Replace Delegation with Inheritance
Copyright@2012-2016 Teddysoft Source: 電影《星際大戰第四集》
Use the Smell, Luke
Copyright@2012-2016 Teddysoft
重構是一種模式,套
用模式要觀察Force
Copyright@2012-2016 Teddysoft
Copyright@2012-2016 Teddysoft
Copyright@2012-2016 Teddysoft
Top-down
Bottom-up
• OOAD (傳統模式)
– Code-First
– Top-down
• TDD (原始模式)
– Test-First
– Bottom-up
Copyright@2012-2016 Teddysoft
Copyright@2012-2016 Teddysoft
Domain Model
Design Model
Implementation
Model
Refactoring
After
ImplementationUse Case
Model
Copyright@2012-2016 Teddysoft
Design Model
Implementation
Model
After
Implementation
Refactoring
Test & Code
OOAD
TDD
Domain Model
Use Case
Model
Most design
happens here
Refactoring
https://goo.gl/8AZQUQ
Copyright@2012-2016 Teddysoft
https://goo.gl/8AZQUQ
Copyright@2012-2016 Teddysoft
Copyright@2012-2016 Teddysoft Source:《Test-Driven Development》
聊天話題3:
哪些原因可能造成學了TDD之後測試能力變
好但卻在落實TDD上遭遇困難?
Copyright@2012-2016 Teddysoft
Design Model
Copyright@2012-2016 Teddysoft
Implementation
Model
After
Implementation
Refactoring
Test & Code
OOAD
BDD + TDD
Test cases as
specification
Domain Model
Use Case
Model
Most design
happens here
Refactoring
Design Model
Copyright@2012-2016 Teddysoft
Implementation
Model
After
Implementation
Refactoring
Test & Code
OOAD
TDD
Test cases as
specification
Domain Model
Use Case
Model
Domain Model
Could DDD help?
Most design
happens here
Refactoring
聊天話題4:
DDD+BDD+TDD之後,傳統bottom-up
形式的test-first開發,還算是bottom-up
嗎?
Copyright@2012-2016 Teddysoft
Copyright@2012-2016 Teddysoft
Source:《禪的世界01--冥想》
Copyright@2012-2016 Teddysoft Source:《禪的世界01--冥想》
Copyright@2012-2016 Teddysoft Source:《The Timeless Way of Building》
Copyright@2012-2016 Teddysoft
部分的加總不等於
全部,體驗整體的
感覺有其必要性
• 軟體開發是一種團隊活動,只有自己會,隊
友不會,這樣的團隊無法長久。
• 自己會相對簡單,讓別人也會,很難。
• 多了解全局,比較有機會與有能力,讓原本
不懂且覺得某個東西很難的人,在你的協助
之下學會並且作出改變。
Copyright@2012-2016 Teddysoft
培養定位「新觀念」,以及建立它和既有知識
之間關係的能力,可以讓你綜觀全局。
Copyright@2012-2016 Teddysoft
Copyright@2012-2016 Teddysoft
Kent Beck叔叔認為:「厲害的
人不是自己很強不管別人死活,
而是能幫助別人,使別人原本
認為很難的事情,在他的幫助
之下變得很簡單。」
• 程式結構有大有小,重構亦然。
• 重構有大有小,重構目標亦然。
• 重構是一種模式,套用模式要觀察Force。
• 部分的加總不等於全部,先體驗整體的感覺
有其必要性。
• 培養一種能力:「在你的幫助之下讓別人原
本覺得很難事變得簡單。」
Copyright@2012-2016 Teddysoft
• 搞笑談軟工部落格
– http://teddy-chen-tw.blogspot.com
• 搞笑談軟工Facebook
– https://www.facebook.com/groups/teddy.tw
• 泰迪軟體官方網站
– http://teddysoft.tw
Copyright@2012-2016 Teddysoft

More Related Content

What's hot

與大師對談: 轉移到微服務架構必經之路 ~ 系統與資料庫重構
與大師對談: 轉移到微服務架構必經之路~ 系統與資料庫重構與大師對談: 轉移到微服務架構必經之路~ 系統與資料庫重構
與大師對談: 轉移到微服務架構必經之路 ~ 系統與資料庫重構Andrew Wu
 
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版Masahiro Nagano
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかShogo Wakayama
 
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugItsuki Kuroda
 
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台Shengyou Fan
 
系統程式 -- 第 11 章
系統程式 -- 第 11 章系統程式 -- 第 11 章
系統程式 -- 第 11 章鍾誠 陳鍾誠
 
Container Storage Best Practices in 2017
Container Storage Best Practices in 2017Container Storage Best Practices in 2017
Container Storage Best Practices in 2017Keith Resar
 
フロントエンドで GraphQLを使った所感
フロントエンドで GraphQLを使った所感フロントエンドで GraphQLを使った所感
フロントエンドで GraphQLを使った所感Chao Li
 
サーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよサーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよkoji lin
 
[C33] 24時間365日「本当に」止まらないデータベースシステムの導入 ~AlwaysOn+Qシステムで完全無停止運用~ by Nobuyuki Sa...
[C33] 24時間365日「本当に」止まらないデータベースシステムの導入 ~AlwaysOn+Qシステムで完全無停止運用~ by Nobuyuki Sa...[C33] 24時間365日「本当に」止まらないデータベースシステムの導入 ~AlwaysOn+Qシステムで完全無停止運用~ by Nobuyuki Sa...
[C33] 24時間365日「本当に」止まらないデータベースシステムの導入 ~AlwaysOn+Qシステムで完全無停止運用~ by Nobuyuki Sa...Insight Technology, Inc.
 
amCharts勉強会
amCharts勉強会amCharts勉強会
amCharts勉強会Naoki Iwami
 
ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術
ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術
ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術Masahiro Nagano
 
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with KarateTakanori Suzuki
 
微服務資料管理的天堂路 - CQRS / Event Sourcing 的應用與實踐
微服務資料管理的天堂路 - CQRS / Event Sourcing 的應用與實踐微服務資料管理的天堂路 - CQRS / Event Sourcing 的應用與實踐
微服務資料管理的天堂路 - CQRS / Event Sourcing 的應用與實踐Andrew Wu
 
できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミングPreferred Networks
 
XunitとMoq 公開用
XunitとMoq 公開用XunitとMoq 公開用
XunitとMoq 公開用ESM SEC
 
SQLインジェクション再考
SQLインジェクション再考SQLインジェクション再考
SQLインジェクション再考Hiroshi Tokumaru
 

What's hot (20)

與大師對談: 轉移到微服務架構必經之路 ~ 系統與資料庫重構
與大師對談: 轉移到微服務架構必經之路~ 系統與資料庫重構與大師對談: 轉移到微服務架構必經之路~ 系統與資料庫重構
與大師對談: 轉移到微服務架構必經之路 ~ 系統與資料庫重構
 
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
 
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
 
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
 
系統程式 -- 第 11 章
系統程式 -- 第 11 章系統程式 -- 第 11 章
系統程式 -- 第 11 章
 
More modern gpu
More modern gpuMore modern gpu
More modern gpu
 
Container Storage Best Practices in 2017
Container Storage Best Practices in 2017Container Storage Best Practices in 2017
Container Storage Best Practices in 2017
 
フロントエンドで GraphQLを使った所感
フロントエンドで GraphQLを使った所感フロントエンドで GraphQLを使った所感
フロントエンドで GraphQLを使った所感
 
サーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよサーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよ
 
[C33] 24時間365日「本当に」止まらないデータベースシステムの導入 ~AlwaysOn+Qシステムで完全無停止運用~ by Nobuyuki Sa...
[C33] 24時間365日「本当に」止まらないデータベースシステムの導入 ~AlwaysOn+Qシステムで完全無停止運用~ by Nobuyuki Sa...[C33] 24時間365日「本当に」止まらないデータベースシステムの導入 ~AlwaysOn+Qシステムで完全無停止運用~ by Nobuyuki Sa...
[C33] 24時間365日「本当に」止まらないデータベースシステムの導入 ~AlwaysOn+Qシステムで完全無停止運用~ by Nobuyuki Sa...
 
amCharts勉強会
amCharts勉強会amCharts勉強会
amCharts勉強会
 
ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術
ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術
ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術
 
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate
 
Katib
KatibKatib
Katib
 
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
 
微服務資料管理的天堂路 - CQRS / Event Sourcing 的應用與實踐
微服務資料管理的天堂路 - CQRS / Event Sourcing 的應用與實踐微服務資料管理的天堂路 - CQRS / Event Sourcing 的應用與實踐
微服務資料管理的天堂路 - CQRS / Event Sourcing 的應用與實踐
 
できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミング
 
XunitとMoq 公開用
XunitとMoq 公開用XunitとMoq 公開用
XunitとMoq 公開用
 
SQLインジェクション再考
SQLインジェクション再考SQLインジェクション再考
SQLインジェクション再考
 

Similar to 重構三兩事

漫談重構
漫談重構漫談重構
漫談重構teddysoft
 
DevOps program 導入經驗談
DevOps program 導入經驗談DevOps program 導入經驗談
DevOps program 導入經驗談levelup31
 
Scrum gathering 2012 shanghai 产品管理及用户体验 分会场:敏捷的hard模式 产品经理视角(窦涵之)
Scrum gathering 2012 shanghai 产品管理及用户体验 分会场:敏捷的hard模式 产品经理视角(窦涵之)Scrum gathering 2012 shanghai 产品管理及用户体验 分会场:敏捷的hard模式 产品经理视角(窦涵之)
Scrum gathering 2012 shanghai 产品管理及用户体验 分会场:敏捷的hard模式 产品经理视角(窦涵之)LetAgileFly
 
軟體開發成功的秘訣
軟體開發成功的秘訣軟體開發成功的秘訣
軟體開發成功的秘訣teddysoft
 
twMVC#42 讓我們用一種方式來開發吧
twMVC#42 讓我們用一種方式來開發吧twMVC#42 讓我們用一種方式來開發吧
twMVC#42 讓我們用一種方式來開發吧twMVC
 
從研發團隊管理及產品發展的角度看 DevOps
從研發團隊管理及產品發展的角度看 DevOps從研發團隊管理及產品發展的角度看 DevOps
從研發團隊管理及產品發展的角度看 DevOpsTIM WANG
 
Effective DevOps (Agile Tour HsinChu 2017)
Effective DevOps (Agile Tour HsinChu 2017)Effective DevOps (Agile Tour HsinChu 2017)
Effective DevOps (Agile Tour HsinChu 2017)Chen Cheng-Wei
 
Effective DevOps:一場文化與技術的轉型運動 (陳正瑋)
Effective DevOps:一場文化與技術的轉型運動  (陳正瑋)Effective DevOps:一場文化與技術的轉型運動  (陳正瑋)
Effective DevOps:一場文化與技術的轉型運動 (陳正瑋)AgileTour@TW
 
專案分層架構 twMVC#18
專案分層架構 twMVC#18專案分層架構 twMVC#18
專案分層架構 twMVC#18twMVC
 
twMVC#18 | 專案分層架構
twMVC#18 | 專案分層架構twMVC#18 | 專案分層架構
twMVC#18 | 專案分層架構twMVC
 
[DCTPE2011] 11) Drupal 是好的生財工具嗎? 2. 中小型網站製作公司/工作室座談
[DCTPE2011] 11) Drupal 是好的生財工具嗎? 2. 中小型網站製作公司/工作室座談[DCTPE2011] 11) Drupal 是好的生財工具嗎? 2. 中小型網站製作公司/工作室座談
[DCTPE2011] 11) Drupal 是好的生財工具嗎? 2. 中小型網站製作公司/工作室座談Drupal Taiwan
 
Silverlight 2.0 完全新手學堂,基礎入門 10 大招
Silverlight 2.0 完全新手學堂,基礎入門 10 大招Silverlight 2.0 完全新手學堂,基礎入門 10 大招
Silverlight 2.0 完全新手學堂,基礎入門 10 大招Chui-Wen Chiu
 
啟動自組織團隊
啟動自組織團隊啟動自組織團隊
啟動自組織團隊Tomas Li
 
Drupal 是好的生財工具嗎?網站標案經驗分享 台灣i運動資訊平台(Drupal as a Cash Cow for Prodution House? ...
Drupal 是好的生財工具嗎?網站標案經驗分享 台灣i運動資訊平台(Drupal as a Cash Cow for Prodution House? ...Drupal 是好的生財工具嗎?網站標案經驗分享 台灣i運動資訊平台(Drupal as a Cash Cow for Prodution House? ...
Drupal 是好的生財工具嗎?網站標案經驗分享 台灣i運動資訊平台(Drupal as a Cash Cow for Prodution House? ...Souyi Yang
 
Agile changes in liba
Agile changes in libaAgile changes in liba
Agile changes in libatopgeek
 
「所知有雲」:維基百科雲端運算中文條目編輯行動發起說明
「所知有雲」:維基百科雲端運算中文條目編輯行動發起說明「所知有雲」:維基百科雲端運算中文條目編輯行動發起說明
「所知有雲」:維基百科雲端運算中文條目編輯行動發起說明Fred Chiang
 
课件开发工具整体解决方案(知行堂)【zxt123.com】
课件开发工具整体解决方案(知行堂)【zxt123.com】课件开发工具整体解决方案(知行堂)【zxt123.com】
课件开发工具整体解决方案(知行堂)【zxt123.com】知行堂(zxt123.com)
 
twMVC#24 | 開發團隊的敏捷之路(未完成)
twMVC#24 | 開發團隊的敏捷之路(未完成)twMVC#24 | 開發團隊的敏捷之路(未完成)
twMVC#24 | 開發團隊的敏捷之路(未完成)twMVC
 
201206 myway 成长和经验分享
201206 myway 成长和经验分享201206 myway 成长和经验分享
201206 myway 成长和经验分享Xu Huang
 

Similar to 重構三兩事 (20)

漫談重構
漫談重構漫談重構
漫談重構
 
DevOps program 導入經驗談
DevOps program 導入經驗談DevOps program 導入經驗談
DevOps program 導入經驗談
 
Scrum gathering 2012 shanghai 产品管理及用户体验 分会场:敏捷的hard模式 产品经理视角(窦涵之)
Scrum gathering 2012 shanghai 产品管理及用户体验 分会场:敏捷的hard模式 产品经理视角(窦涵之)Scrum gathering 2012 shanghai 产品管理及用户体验 分会场:敏捷的hard模式 产品经理视角(窦涵之)
Scrum gathering 2012 shanghai 产品管理及用户体验 分会场:敏捷的hard模式 产品经理视角(窦涵之)
 
軟體開發成功的秘訣
軟體開發成功的秘訣軟體開發成功的秘訣
軟體開發成功的秘訣
 
twMVC#42 讓我們用一種方式來開發吧
twMVC#42 讓我們用一種方式來開發吧twMVC#42 讓我們用一種方式來開發吧
twMVC#42 讓我們用一種方式來開發吧
 
從研發團隊管理及產品發展的角度看 DevOps
從研發團隊管理及產品發展的角度看 DevOps從研發團隊管理及產品發展的角度看 DevOps
從研發團隊管理及產品發展的角度看 DevOps
 
42qu thrift1
42qu thrift142qu thrift1
42qu thrift1
 
Effective DevOps (Agile Tour HsinChu 2017)
Effective DevOps (Agile Tour HsinChu 2017)Effective DevOps (Agile Tour HsinChu 2017)
Effective DevOps (Agile Tour HsinChu 2017)
 
Effective DevOps:一場文化與技術的轉型運動 (陳正瑋)
Effective DevOps:一場文化與技術的轉型運動  (陳正瑋)Effective DevOps:一場文化與技術的轉型運動  (陳正瑋)
Effective DevOps:一場文化與技術的轉型運動 (陳正瑋)
 
專案分層架構 twMVC#18
專案分層架構 twMVC#18專案分層架構 twMVC#18
專案分層架構 twMVC#18
 
twMVC#18 | 專案分層架構
twMVC#18 | 專案分層架構twMVC#18 | 專案分層架構
twMVC#18 | 專案分層架構
 
[DCTPE2011] 11) Drupal 是好的生財工具嗎? 2. 中小型網站製作公司/工作室座談
[DCTPE2011] 11) Drupal 是好的生財工具嗎? 2. 中小型網站製作公司/工作室座談[DCTPE2011] 11) Drupal 是好的生財工具嗎? 2. 中小型網站製作公司/工作室座談
[DCTPE2011] 11) Drupal 是好的生財工具嗎? 2. 中小型網站製作公司/工作室座談
 
Silverlight 2.0 完全新手學堂,基礎入門 10 大招
Silverlight 2.0 完全新手學堂,基礎入門 10 大招Silverlight 2.0 完全新手學堂,基礎入門 10 大招
Silverlight 2.0 完全新手學堂,基礎入門 10 大招
 
啟動自組織團隊
啟動自組織團隊啟動自組織團隊
啟動自組織團隊
 
Drupal 是好的生財工具嗎?網站標案經驗分享 台灣i運動資訊平台(Drupal as a Cash Cow for Prodution House? ...
Drupal 是好的生財工具嗎?網站標案經驗分享 台灣i運動資訊平台(Drupal as a Cash Cow for Prodution House? ...Drupal 是好的生財工具嗎?網站標案經驗分享 台灣i運動資訊平台(Drupal as a Cash Cow for Prodution House? ...
Drupal 是好的生財工具嗎?網站標案經驗分享 台灣i運動資訊平台(Drupal as a Cash Cow for Prodution House? ...
 
Agile changes in liba
Agile changes in libaAgile changes in liba
Agile changes in liba
 
「所知有雲」:維基百科雲端運算中文條目編輯行動發起說明
「所知有雲」:維基百科雲端運算中文條目編輯行動發起說明「所知有雲」:維基百科雲端運算中文條目編輯行動發起說明
「所知有雲」:維基百科雲端運算中文條目編輯行動發起說明
 
课件开发工具整体解决方案(知行堂)【zxt123.com】
课件开发工具整体解决方案(知行堂)【zxt123.com】课件开发工具整体解决方案(知行堂)【zxt123.com】
课件开发工具整体解决方案(知行堂)【zxt123.com】
 
twMVC#24 | 開發團隊的敏捷之路(未完成)
twMVC#24 | 開發團隊的敏捷之路(未完成)twMVC#24 | 開發團隊的敏捷之路(未完成)
twMVC#24 | 開發團隊的敏捷之路(未完成)
 
201206 myway 成长和经验分享
201206 myway 成长和经验分享201206 myway 成长和经验分享
201206 myway 成长和经验分享
 

More from teddysoft

Dci vs aggregate_dddtw_2021-0.3-16-9
Dci vs aggregate_dddtw_2021-0.3-16-9Dci vs aggregate_dddtw_2021-0.3-16-9
Dci vs aggregate_dddtw_2021-0.3-16-9teddysoft
 
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-previewteddysoft
 
DDD + Clean Architecture: 從需求到實作
DDD + Clean Architecture: 從需求到實作DDD + Clean Architecture: 從需求到實作
DDD + Clean Architecture: 從需求到實作teddysoft
 
Pattern based problem solving-published
Pattern based problem solving-publishedPattern based problem solving-published
Pattern based problem solving-publishedteddysoft
 
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-publishedteddysoft
 
從Bowling Game Kata看敏捷開發
從Bowling Game Kata看敏捷開發從Bowling Game Kata看敏捷開發
從Bowling Game Kata看敏捷開發teddysoft
 
當Scrum遇到Pattern
當Scrum遇到Pattern當Scrum遇到Pattern
當Scrum遇到Patternteddysoft
 
說出一嘴好設計 1.1
說出一嘴好設計 1.1說出一嘴好設計 1.1
說出一嘴好設計 1.1teddysoft
 
跟著Teddy讀Pattern
跟著Teddy讀Pattern跟著Teddy讀Pattern
跟著Teddy讀Patternteddysoft
 
洗白你的軟體架構
洗白你的軟體架構洗白你的軟體架構
洗白你的軟體架構teddysoft
 
如何學好設計模式
如何學好設計模式如何學好設計模式
如何學好設計模式teddysoft
 
Bdd atdd sbe_tdd_ddd_published
Bdd atdd sbe_tdd_ddd_publishedBdd atdd sbe_tdd_ddd_published
Bdd atdd sbe_tdd_ddd_publishedteddysoft
 
了解模式讓你更敏捷 (C C Agile 活動分享)
了解模式讓你更敏捷 (C C Agile 活動分享)了解模式讓你更敏捷 (C C Agile 活動分享)
了解模式讓你更敏捷 (C C Agile 活動分享)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周年-publishedteddysoft
 
好設計如何好 @ C.C. Agile #14
好設計如何好 @ C.C. Agile #14好設計如何好 @ C.C. Agile #14
好設計如何好 @ C.C. Agile #14teddysoft
 
[教材] 例外處理設計與重構實作班201309
[教材] 例外處理設計與重構實作班201309[教材] 例外處理設計與重構實作班201309
[教材] 例外處理設計與重構實作班201309teddysoft
 
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
 

More from teddysoft (20)

Dci vs aggregate_dddtw_2021-0.3-16-9
Dci vs aggregate_dddtw_2021-0.3-16-9Dci vs aggregate_dddtw_2021-0.3-16-9
Dci vs aggregate_dddtw_2021-0.3-16-9
 
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
 
DDD + Clean Architecture: 從需求到實作
DDD + Clean Architecture: 從需求到實作DDD + Clean Architecture: 從需求到實作
DDD + Clean Architecture: 從需求到實作
 
Pattern based problem solving-published
Pattern based problem solving-publishedPattern based problem solving-published
Pattern based problem solving-published
 
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
 
從Bowling Game Kata看敏捷開發
從Bowling Game Kata看敏捷開發從Bowling Game Kata看敏捷開發
從Bowling Game Kata看敏捷開發
 
當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
 
[教材] 例外處理設計與重構實作班201309
[教材] 例外處理設計與重構實作班201309[教材] 例外處理設計與重構實作班201309
[教材] 例外處理設計與重構實作班201309
 
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不再是問題
 

重構三兩事