SlideShare une entreprise Scribd logo
1  sur  94
Télécharger pour lire hors ligne
Teddy Chen
teddy@teddysoft.tw
http://teddy-chen-tw.blogspot.tw/
2020/09/15
Copyright@2020 Teddysoft
• Part 1: 什麼是重構?
• Part 2: 從定義看重構
• Part 3: 重構的定位
– Refactoring and Patterns
• Part 4: 重構與設計方法
– TDD/BDD/SBE vs OOAD vs DDD
• Part 5: 重構範例討論
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
在不改變程式外在行為的前提之下,
改變程式內部結構以提升設計品質的方法
Copyright@2020 Teddysoft
Before refactoring After refactoring
Copyright@2020 Teddysoft
http://goo.gl/6uqzes
B
A
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
《Extreme Programming explained》
好的軟體設計,其改變的成本應該與改變的範圍有關,
與改變發生的時間點無關《Clean Architecture》
Copyright@2012-2016 Teddysoft Source http://goo.gl/roc09w
• 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@2020 Teddysoft Source:《Refactoring》
Copyright@2020 Teddysoft Source:《Refactoring》
Copyright@2019 Teddysoft
確定所有測試
都通過
發現怪味道 決定如何簡化
簡化程式
(重構)
確定所有測試
都依舊通過
• 隨時
• 事不過三原則
• 當增加新功能很困難時
• 當你對程式更了解時
• 當你修正bug時
• 當程式碼發臭時
Copyright@2020 Teddysoft
• 沒有測試案例
• 測試案例失敗時
• 當你應該重寫而非重構時
• 當你的截止日期迫在眉睫時
Copyright@2020 Teddysoft
• Shared code
• Coding standards
• Pair programming
• Simple design
– Passes the tests, Reveals intention, No duplication,
Fewest elements
• Tests
• Continuous integration
• Rested programmers
Copyright@2020 Teddysoft 《Extreme Programming Explained》
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
Source:《Refactoring》
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
Data Class
Feature Envy
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
5
2
4
在不改變程式外在行為的前提之下,
改變程式內部結構以提升設計品質
1
6
如何確認? 如何定義?
怎麼改? 哪些結構可以改? 品質的提升目標為何?
3 為什麼要以不改變程
式外在行為當作前提?
Copyright@2020 Teddysoft
在不改變程式外在行為的前提之下,
改變程式內部結構以提升設計品質
1
if 1 == 1 then S1 else S2
Copyright@2020 Teddysoft
開什麼玩笑!
太難
Ref. : https://goo.gl/sBYyAg
• Denotational semantics
• Operational semantics
• Axiomatic semantics
Copyright@2020 Teddysoft
• Normal behavior
– 一般重構
• Exceptional behavior
– 例外處理重構
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
Replace semantics proven
with scenario-based tests
思考問題1:
用測試定義行為有何優缺點?
有無替代方案?
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
在不改變程式外在行為的前提之下,
改變程式內部結構以提升設計品質
2
• 使用工具
– 編譯器
– 重構工具
• 執行測試案例
– Local Build
– CI Build
Copyright@2020 Teddysoft
IntelliJ 的重構選項
• Normal behavior
– 一般重構
– 不改變程式的正常行為
• Exceptional behavior
– 例外處理重構
– 可能會改變程式的例外行為
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
重構最常用執行測試驗
證程式行為有無改變
Copyright@2020 Teddysoft
在不改變程式外在行為的前提之下,
改變程式內部結構以提升設計品質
3
• 開發的兩頂帽子
– 實作功能性需求 (do the right thing)
– 改善設計(do the thing right; 寫出clean code)
• 呼應軟體設計原則
– Separation of Concerns
– Single Responsibility Principle
– One Pattern at a Time
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
思考do the thing right
的時候不要管do the
right thing
Copyright@2020 Teddysoft
在不改變程式外在行為的前提之下,
改變程式內部結構以提升設計品質
4
Copyright@2020 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
Copyright@2020 Teddysoft
程式結構有大有小,
重構亦然
Copyright@2020 Teddysoft
在不改變程式外在行為的前提之下,
改變程式內部結構以提升設計品質
5
Copyright@2019 Teddysoft
確定所有測試
都通過
發現怪味道 決定如何簡化
簡化程式
(重構)
確定所有測試
都依舊通過
• Dispensable
– Comments, Duplicated Code, Lazy Class, Data Class, Speculative
Generality
• Bloater
– Long Method, Long Parameter List, Large Class, Data Clumps,
Primitive Obsession
• OO Abuser
– Switch Statement Repeated Switches, Temporary Field, Alternative
Classes with Different Interfaces, Refused Bequest
• Coupler
– Feature Envy, Message Chains, Middle Man, Inappropriate Intimacy,
Incomplete Library Class
• Change Preventer
– Divergent Change, Shotgun Surgery, Parallel Inheritance Hierarchies
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
Parameter Object
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
在不改變程式外在行為的前提之下,
改變程式內部結構以提升設計品質
6
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@2020 Teddysoft
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@2020 Teddysoft
Copyright@2020 Teddysoft
重構有大有小,
重構目標亦然
Copyright@2020 Teddysoft
民意調查:
重構是一種模式(Pattern)嗎?
Copyright@2020 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@2020 Teddysoft
• 名詞片語 (Noun-phrase)
– 描述模式所建立或產生的結果
– 例子:Singleton, Command, Model-View-
Controller
• 動詞片語 (Verb-phrase)
– 給定一個指令,描述如何達到模式解決方案所要
求的狀態
– 例子:Don’t Talk to Strangers, Separate
Material Preparation from Integration
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft Source:《The Timeless Way of Building》
http://goo.gl/tS13cE
思考問題2:
如果重構是一種模式,為什麼重構用動詞而
不像大部份設計模式採用名詞?
Copyright@2020 Teddysoft
Rename VS Intention Revealing Names
• 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@2020 Teddysoft
Source: Asian PLoP 2016 by Joseph
Yoder and Rebecca Wirfs-Brock
Copyright@2020 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@2020 Teddysoft Source: 電影《星際大戰第四集》
Copyright@2020 Teddysoft
設計就是決定Context與Form的邊界
Source:《Notes on the Synthesis of Form》
Context
Before
MachineProblem
force
force
Worl
d
Resulting
Context
Solution
force
force
force
After
force
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
重構是一種模式,
套用模式要觀察
Context與Forces
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
Top-down
Bottom-up
• OOAD (傳統模式)
– Code-First
– Top-down
• TDD (原始模式)
– Test-First
– Bottom-up
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
Domain Model
Design Model
Implementation
Model
Refactoring
After
ImplementationUse Case
Model
Copyright@2020 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@2020 Teddysoft
https://goo.gl/8AZQUQ
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft Source:《Test-Driven Development》
Design Model
Copyright@2020 Teddysoft
Implementation
Model
After
Implementation
Refactoring
Test & Code
OOAD
BDD/SBE + TDD
Test cases as
specification
Domain Model
Use Case
Model
Most design
happens here
Refactoring
Design Model
Copyright@2020 Teddysoft
Implementation
Model
After
Implementation
Refactoring
Test & Code
OOAD
TDD
Test cases as
specification
Domain Model
Use Case
Model
Domain Model
DDD can help.
Design happens here
And design
happens here
Refactoring
思考問題3:
DDD+BDD/SBE+TDD之後,傳統bottom-
up形式的test-first開發,還算是bottom-
up嗎?
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
Source:《禪的世界01--冥想》
Copyright@2020 Teddysoft Source:《禪的世界01--冥想》
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
部分的加總不等於
全部,體驗整體的
感覺有其必要性
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
CreateBoardController CreateBoardUseCase
Board
BoardRepository
Middle Man?
Copyright@2020 Teddysoft
CreateBoardController CreateBoardUseCase
Board
BoardRepository
Middle Man?
《Clean Architecture》
All problems in computer
science can be solved by
another level of indirection
Copyright@2020 Teddysoft
by David Wheeler
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
public record Person (String name, String address) {}
Copyright@2020 Teddysoft
Package by Layer Package by Feature
Copyright@2020 Teddysoft
1. Card
2. Work Item
3. Task
4. Ticket
哪個名字好?
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
• 程式結構有大有小,重構亦然。
• 重構是一種模式,套用模式要觀察Context
與Forces。
• 設計是一種由上而下的過程,部分的加總不
等於全部,先體驗整體的感覺有其必要性。
– 事後諸葛亮,事前豬一樣 VS 事前諸葛亮
Copyright@2020 Teddysoft
• 搞笑談軟工部落格
– http://teddy-chen-tw.blogspot.com
• 搞笑談軟工Facebook
– https://www.facebook.com/groups/teddy.tw
• 泰迪軟體官方網站
– http://teddysoft.tw
Copyright@2020 Teddysoft

Contenu connexe

Tendances

【Unite Tokyo 2019】たのしいDOTS〜初級から上級まで〜
【Unite Tokyo 2019】たのしいDOTS〜初級から上級まで〜【Unite Tokyo 2019】たのしいDOTS〜初級から上級まで〜
【Unite Tokyo 2019】たのしいDOTS〜初級から上級まで〜UnityTechnologiesJapan002
 
團隊協作實戰DDD
團隊協作實戰DDD團隊協作實戰DDD
團隊協作實戰DDDJed Lin
 
Visual Studio Code 快速上手指南
Visual Studio Code 快速上手指南Visual Studio Code 快速上手指南
Visual Studio Code 快速上手指南Shengyou Fan
 
從緊急事件 談 SRE 應變能力的培養 - DevOpsDays Taipei 2018
從緊急事件  談 SRE 應變能力的培養 - DevOpsDays Taipei 2018從緊急事件  談 SRE 應變能力的培養 - DevOpsDays Taipei 2018
從緊急事件 談 SRE 應變能力的培養 - DevOpsDays Taipei 2018Rick Hwang
 
2019-03-13-ddd taiwan-community-iddd-studygroup-2nd
2019-03-13-ddd taiwan-community-iddd-studygroup-2nd2019-03-13-ddd taiwan-community-iddd-studygroup-2nd
2019-03-13-ddd taiwan-community-iddd-studygroup-2ndFong Liou
 
オタクエンジニアを熱くさせる!モチベーションをあげるチームビルディング
オタクエンジニアを熱くさせる!モチベーションをあげるチームビルディングオタクエンジニアを熱くさせる!モチベーションをあげるチームビルディング
オタクエンジニアを熱くさせる!モチベーションをあげるチームビルディング虎の穴 開発室
 
使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)Max Lai
 
イベント・ソーシングを知る
イベント・ソーシングを知るイベント・ソーシングを知る
イベント・ソーシングを知るShuhei Fujita
 
Gitはじめの一歩
Gitはじめの一歩Gitはじめの一歩
Gitはじめの一歩Ayana Yokota
 
ゲームデータの圧縮・解凍ツール Oodle 最新情報 - RAD ゲームツールズ - GTMF 2018 TOKYO
ゲームデータの圧縮・解凍ツール Oodle 最新情報 - RAD ゲームツールズ - GTMF 2018 TOKYOゲームデータの圧縮・解凍ツール Oodle 最新情報 - RAD ゲームツールズ - GTMF 2018 TOKYO
ゲームデータの圧縮・解凍ツール Oodle 最新情報 - RAD ゲームツールズ - GTMF 2018 TOKYOGame Tools & Middleware Forum
 
Design Patterns這樣學就會了:入門班 Day1 教材
Design Patterns這樣學就會了:入門班 Day1 教材Design Patterns這樣學就會了:入門班 Day1 教材
Design Patterns這樣學就會了:入門班 Day1 教材teddysoft
 
アジャイル開発はWhyから始まる
アジャイル開発はWhyから始まるアジャイル開発はWhyから始まる
アジャイル開発はWhyから始まるtoshihiro ichitani
 
テストを書こう、Unity編
テストを書こう、Unity編テストを書こう、Unity編
テストを書こう、Unity編Hiroto Imoto
 
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜gree_tech
 
WebAssembly向け多倍長演算の実装
WebAssembly向け多倍長演算の実装WebAssembly向け多倍長演算の実装
WebAssembly向け多倍長演算の実装MITSUNARI Shigeo
 
4つの戦犯から考えるサービスづくりの失敗
4つの戦犯から考えるサービスづくりの失敗4つの戦犯から考えるサービスづくりの失敗
4つの戦犯から考えるサービスづくりの失敗toshihiro ichitani
 
事件風暴-領域建模
事件風暴-領域建模事件風暴-領域建模
事件風暴-領域建模國昭 張
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Preferred Networks
 

Tendances (20)

【Unite Tokyo 2019】たのしいDOTS〜初級から上級まで〜
【Unite Tokyo 2019】たのしいDOTS〜初級から上級まで〜【Unite Tokyo 2019】たのしいDOTS〜初級から上級まで〜
【Unite Tokyo 2019】たのしいDOTS〜初級から上級まで〜
 
團隊協作實戰DDD
團隊協作實戰DDD團隊協作實戰DDD
團隊協作實戰DDD
 
Visual Studio Code 快速上手指南
Visual Studio Code 快速上手指南Visual Studio Code 快速上手指南
Visual Studio Code 快速上手指南
 
從緊急事件 談 SRE 應變能力的培養 - DevOpsDays Taipei 2018
從緊急事件  談 SRE 應變能力的培養 - DevOpsDays Taipei 2018從緊急事件  談 SRE 應變能力的培養 - DevOpsDays Taipei 2018
從緊急事件 談 SRE 應變能力的培養 - DevOpsDays Taipei 2018
 
2019-03-13-ddd taiwan-community-iddd-studygroup-2nd
2019-03-13-ddd taiwan-community-iddd-studygroup-2nd2019-03-13-ddd taiwan-community-iddd-studygroup-2nd
2019-03-13-ddd taiwan-community-iddd-studygroup-2nd
 
オタクエンジニアを熱くさせる!モチベーションをあげるチームビルディング
オタクエンジニアを熱くさせる!モチベーションをあげるチームビルディングオタクエンジニアを熱くさせる!モチベーションをあげるチームビルディング
オタクエンジニアを熱くさせる!モチベーションをあげるチームビルディング
 
使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)
 
イベント・ソーシングを知る
イベント・ソーシングを知るイベント・ソーシングを知る
イベント・ソーシングを知る
 
Gitはじめの一歩
Gitはじめの一歩Gitはじめの一歩
Gitはじめの一歩
 
ゲームデータの圧縮・解凍ツール Oodle 最新情報 - RAD ゲームツールズ - GTMF 2018 TOKYO
ゲームデータの圧縮・解凍ツール Oodle 最新情報 - RAD ゲームツールズ - GTMF 2018 TOKYOゲームデータの圧縮・解凍ツール Oodle 最新情報 - RAD ゲームツールズ - GTMF 2018 TOKYO
ゲームデータの圧縮・解凍ツール Oodle 最新情報 - RAD ゲームツールズ - GTMF 2018 TOKYO
 
Design Patterns這樣學就會了:入門班 Day1 教材
Design Patterns這樣學就會了:入門班 Day1 教材Design Patterns這樣學就會了:入門班 Day1 教材
Design Patterns這樣學就會了:入門班 Day1 教材
 
アジャイル開発はWhyから始まる
アジャイル開発はWhyから始まるアジャイル開発はWhyから始まる
アジャイル開発はWhyから始まる
 
Jenkins 再入門
Jenkins 再入門Jenkins 再入門
Jenkins 再入門
 
TLA+についての話
TLA+についての話TLA+についての話
TLA+についての話
 
テストを書こう、Unity編
テストを書こう、Unity編テストを書こう、Unity編
テストを書こう、Unity編
 
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜
 
WebAssembly向け多倍長演算の実装
WebAssembly向け多倍長演算の実装WebAssembly向け多倍長演算の実装
WebAssembly向け多倍長演算の実装
 
4つの戦犯から考えるサービスづくりの失敗
4つの戦犯から考えるサービスづくりの失敗4つの戦犯から考えるサービスづくりの失敗
4つの戦犯から考えるサービスづくりの失敗
 
事件風暴-領域建模
事件風暴-領域建模事件風暴-領域建模
事件風暴-領域建模
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
 

Similaire à 漫談重構

重構三兩事
重構三兩事重構三兩事
重構三兩事teddysoft
 
初探工程師升級手冊 2022
初探工程師升級手冊 2022初探工程師升級手冊 2022
初探工程師升級手冊 2022Caesar Chi
 
淘宝网前端应用与发展
淘宝网前端应用与发展淘宝网前端应用与发展
淘宝网前端应用与发展taobao.com
 
.net framework from 1.0 -> 4.0
.net framework from 1.0 -> 4.0.net framework from 1.0 -> 4.0
.net framework from 1.0 -> 4.0ligaoren
 
2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生appuniverz
 
Our experience to start a startup
Our experience to start a startupOur experience to start a startup
Our experience to start a startupYenwen Feng
 
IoT Cloud Platforms- Players, Vendors and Vertical Segments -20160519
IoT Cloud Platforms- Players, Vendors and Vertical Segments -20160519IoT Cloud Platforms- Players, Vendors and Vertical Segments -20160519
IoT Cloud Platforms- Players, Vendors and Vertical Segments -20160519August Lin
 
Recycle Open Source Projects
Recycle Open Source ProjectsRecycle Open Source Projects
Recycle Open Source ProjectsGeorge Ang
 
2006 recycle opensourceprojects
2006 recycle opensourceprojects2006 recycle opensourceprojects
2006 recycle opensourceprojectsGeorge Ang
 
2020.04.01 DDD讀書會第三次導讀資料
2020.04.01 DDD讀書會第三次導讀資料2020.04.01 DDD讀書會第三次導讀資料
2020.04.01 DDD讀書會第三次導讀資料hoblues
 
計畫書撰寫 方案教材-詹翔霖教授
計畫書撰寫 方案教材-詹翔霖教授計畫書撰寫 方案教材-詹翔霖教授
計畫書撰寫 方案教材-詹翔霖教授文化大學
 
過來人經驗 - 在企業中推行 DevOps 前該具備的認知與工具箱
過來人經驗 - 在企業中推行 DevOps 前該具備的認知與工具箱過來人經驗 - 在企業中推行 DevOps 前該具備的認知與工具箱
過來人經驗 - 在企業中推行 DevOps 前該具備的認知與工具箱TIM WANG
 
Scrum gathering 2012 shanghai 产品管理及用户体验 分会场:敏捷的hard模式 产品经理视角(窦涵之)
Scrum gathering 2012 shanghai 产品管理及用户体验 分会场:敏捷的hard模式 产品经理视角(窦涵之)Scrum gathering 2012 shanghai 产品管理及用户体验 分会场:敏捷的hard模式 产品经理视角(窦涵之)
Scrum gathering 2012 shanghai 产品管理及用户体验 分会场:敏捷的hard模式 产品经理视角(窦涵之)LetAgileFly
 
Taobao数据库这5年
Taobao数据库这5年Taobao数据库这5年
Taobao数据库这5年yp_fangdong
 
Visual Studio 開發密技大補帖 | Study4.TW 2021 小聚#2
Visual Studio 開發密技大補帖 | Study4.TW 2021 小聚#2Visual Studio 開發密技大補帖 | Study4.TW 2021 小聚#2
Visual Studio 開發密技大補帖 | Study4.TW 2021 小聚#2Alan Tsai
 
软件工程
软件工程软件工程
软件工程bill0077
 
A Modern Web Architecture for (GDPR) Compliance
A Modern Web Architecture for (GDPR) ComplianceA Modern Web Architecture for (GDPR) Compliance
A Modern Web Architecture for (GDPR) ComplianceYi-Feng Tzeng
 
Performance 入門 - 前端工程開發實務訓練
Performance 入門 - 前端工程開發實務訓練Performance 入門 - 前端工程開發實務訓練
Performance 入門 - 前端工程開發實務訓練Joseph Chiang
 
Actify's Product solution Presentation in Simplified Chinese
Actify's Product solution Presentation in Simplified ChineseActify's Product solution Presentation in Simplified Chinese
Actify's Product solution Presentation in Simplified ChineseAlen Kuo
 

Similaire à 漫談重構 (20)

重構三兩事
重構三兩事重構三兩事
重構三兩事
 
初探工程師升級手冊 2022
初探工程師升級手冊 2022初探工程師升級手冊 2022
初探工程師升級手冊 2022
 
淘宝网前端应用与发展
淘宝网前端应用与发展淘宝网前端应用与发展
淘宝网前端应用与发展
 
.net framework from 1.0 -> 4.0
.net framework from 1.0 -> 4.0.net framework from 1.0 -> 4.0
.net framework from 1.0 -> 4.0
 
2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生
 
42qu thrift1
42qu thrift142qu thrift1
42qu thrift1
 
Our experience to start a startup
Our experience to start a startupOur experience to start a startup
Our experience to start a startup
 
IoT Cloud Platforms- Players, Vendors and Vertical Segments -20160519
IoT Cloud Platforms- Players, Vendors and Vertical Segments -20160519IoT Cloud Platforms- Players, Vendors and Vertical Segments -20160519
IoT Cloud Platforms- Players, Vendors and Vertical Segments -20160519
 
Recycle Open Source Projects
Recycle Open Source ProjectsRecycle Open Source Projects
Recycle Open Source Projects
 
2006 recycle opensourceprojects
2006 recycle opensourceprojects2006 recycle opensourceprojects
2006 recycle opensourceprojects
 
2020.04.01 DDD讀書會第三次導讀資料
2020.04.01 DDD讀書會第三次導讀資料2020.04.01 DDD讀書會第三次導讀資料
2020.04.01 DDD讀書會第三次導讀資料
 
計畫書撰寫 方案教材-詹翔霖教授
計畫書撰寫 方案教材-詹翔霖教授計畫書撰寫 方案教材-詹翔霖教授
計畫書撰寫 方案教材-詹翔霖教授
 
過來人經驗 - 在企業中推行 DevOps 前該具備的認知與工具箱
過來人經驗 - 在企業中推行 DevOps 前該具備的認知與工具箱過來人經驗 - 在企業中推行 DevOps 前該具備的認知與工具箱
過來人經驗 - 在企業中推行 DevOps 前該具備的認知與工具箱
 
Scrum gathering 2012 shanghai 产品管理及用户体验 分会场:敏捷的hard模式 产品经理视角(窦涵之)
Scrum gathering 2012 shanghai 产品管理及用户体验 分会场:敏捷的hard模式 产品经理视角(窦涵之)Scrum gathering 2012 shanghai 产品管理及用户体验 分会场:敏捷的hard模式 产品经理视角(窦涵之)
Scrum gathering 2012 shanghai 产品管理及用户体验 分会场:敏捷的hard模式 产品经理视角(窦涵之)
 
Taobao数据库这5年
Taobao数据库这5年Taobao数据库这5年
Taobao数据库这5年
 
Visual Studio 開發密技大補帖 | Study4.TW 2021 小聚#2
Visual Studio 開發密技大補帖 | Study4.TW 2021 小聚#2Visual Studio 開發密技大補帖 | Study4.TW 2021 小聚#2
Visual Studio 開發密技大補帖 | Study4.TW 2021 小聚#2
 
软件工程
软件工程软件工程
软件工程
 
A Modern Web Architecture for (GDPR) Compliance
A Modern Web Architecture for (GDPR) ComplianceA Modern Web Architecture for (GDPR) Compliance
A Modern Web Architecture for (GDPR) Compliance
 
Performance 入門 - 前端工程開發實務訓練
Performance 入門 - 前端工程開發實務訓練Performance 入門 - 前端工程開發實務訓練
Performance 入門 - 前端工程開發實務訓練
 
Actify's Product solution Presentation in Simplified Chinese
Actify's Product solution Presentation in Simplified ChineseActify's Product solution Presentation in Simplified Chinese
Actify's Product solution Presentation in Simplified Chinese
 

Plus de 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-previewteddysoft
 
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
 
軟體開發成功的秘訣
軟體開發成功的秘訣軟體開發成功的秘訣
軟體開發成功的秘訣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
 
搞懂Java例外處理的難題:Checked與Unchecked Exceptions不再是問題
搞懂Java例外處理的難題:Checked與Unchecked Exceptions不再是問題搞懂Java例外處理的難題:Checked與Unchecked Exceptions不再是問題
搞懂Java例外處理的難題:Checked與Unchecked Exceptions不再是問題teddysoft
 
Java 例外處理壞味道與重構技術
Java 例外處理壞味道與重構技術Java 例外處理壞味道與重構技術
Java 例外處理壞味道與重構技術teddysoft
 

Plus de 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
 
從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
 
搞懂Java例外處理的難題:Checked與Unchecked Exceptions不再是問題
搞懂Java例外處理的難題:Checked與Unchecked Exceptions不再是問題搞懂Java例外處理的難題:Checked與Unchecked Exceptions不再是問題
搞懂Java例外處理的難題:Checked與Unchecked Exceptions不再是問題
 
Java 例外處理壞味道與重構技術
Java 例外處理壞味道與重構技術Java 例外處理壞味道與重構技術
Java 例外處理壞味道與重構技術
 

漫談重構