|
Java电子书:重构 改善既有代码的设计 Java语言版 PDF 电子书 Java吧 java8.com2 K3 I# Z1 x |; L& Q2 T& w
7 a4 g2 f3 f) K2 r# I: C& m
作者:[美]Martin Fowler 著,熊节 译出版社:人民邮电出版社出版时间:2015年08月 0 F9 ?$ X" y3 I# v5 n6 ?
T" F; r0 y2 v5 f9 |
- H4 O" U+ j, C/ N: v Q
编号:166-Java吧资源免费-P009【Java吧 java8.com】) V- Y+ Z; I2 ^$ q7 R6 Q' w6 `
- {+ \) {, z9 l8 |3 B+ p# p6 e6 m$ J2 M1 @
! C- Y6 y) l% J' [目录:第1章 重构,个案例 - i8 ~& _' e% C: k6 O
1.1 起点
, x4 s O9 }% M v; c5 Y6 T1.2 重构的步
4 Q: K9 {$ j0 u$ l `1.3 分解并重组statement()
; `# `' d5 l8 A# z& u3 a# i* f1.4 运用多态取代与价格相关的条件逻辑
% }8 \: S+ L; n( [$ u9 G1.5 结语
/ c6 M# D$ E( _& j, Y6 M第2章 重构原则 # b0 V% o9 |' Y, c5 D4 X: `
2.1 何谓重构 9 w3 V$ o6 M" A% z* ?4 ~! L
2.2 为何重构 6 |+ N! l0 x9 k. |7 F- P% p4 S3 A
2.3 何时重构
# b/ I6 f7 o. \$ n8 X a2.4 怎么对经理说 * M' N& B4 {: w2 A
2.5 重构的难题
+ G! t+ M4 L4 n. i+ R5 t; K: g2.6 重构与设计 6 z# f' W. a% Z9 C( k/ w
2.7 重构与性能 ' \* r- X7 ?4 l4 B
2.8 重构起源何处
1 q* z0 X- T/ m: e第3章 代码的坏味道
4 G& o5 ] F" Y+ W. p5 z3.1 Duplicated Code(重复代码)
9 Y* }3 D3 O3 f! v* S: F7 B3.2 Long Method(过长函数) - T" o' W* L1 d1 k( Q
3.3 Large Class(过大的类)
. r4 R; ?) o! G: z3.4 Long Parameter List(过长参数列) 6 W1 O R. D$ E2 ^/ s; O7 z1 T
3.5 Divergent Change(发散式变化)
2 I/ q( \9 C1 s- X3.6 Shotgun Surgery(霰弹式修改)
3 V2 Z9 c. k4 m; V1 h3.7 Feature Envy(依恋情结) . P1 s$ `8 r/ `! l+ |( p5 O
3.8 Data Clumps(数据泥团) & O8 T: ^1 D0 F. Z; ^+ L
3.9 Primitive Obsession(基本类型偏执) " ^- n! \$ y0 x9 w# C7 a
3.10 Switch Statements(switch惊悚现身) : m8 i- [- V+ s2 H" t. ^
3.11 Parallel InheritanceHierarchies(平行继承体系) , @& j* W9 M7 b! B( k
3.12 Lazy Class(冗赘类) / ~' \. J7 r9 U3 E
3.13 Speculative Generality(夸夸其谈未来性)
7 E6 c; D; h$ V9 V5 B3.14 Temporary Field(令人迷惑的暂时字段)
* p/ D" r* k/ Q1 |3.15 Message Chains(过度耦合的消息链) & n& M# t6 V: l. V0 s
3.16 Middle Man(中间人) 5 C* d+ ?) b& B' n# N! N! M
3.17 Inappropriate Intimacy(狎昵关系) . @) V( r, _2 X) p v
3.18 Alternative Classes with Different Interfaces(异曲同工的类) % F( \3 v6 x' i0 c) m, I
3.19 Incomplete Library Class(不完美的库类)
, n" n! b, J" h0 s9 X; {3.20 Data Class(纯稚的数据类) " v. r$ [) U& V5 c3 b( `2 Y
3.21 Refused Bequest(被拒绝的遗赠) & _2 a! h- A! s0 G7 V" G' g
3.22 Comments(过多的注释)
0 C) M& v {+ Y7 a2 u# O第4章 构筑测试体系
7 B" b. d! k% [4.1 自测试代码的价值
! I( I/ \) x8 l3 i; x8 Z' h# m: `4.2 JUnit测试框架
6 r0 E2 T1 u# P4 m5 W5 [0 |4.3 添加更多测试 . R- F$ M: d9 @1 e
第5章 重构列表 , } I& A1 s* N# F6 A; J
5.1 重构的记录格式
* i0 m; V8 Y+ i6 L8 Q" k5.2 寻找引用点
* Q: M& J4 {6 H- G5 W5.3 这些重构手法有多成熟
, p9 b9 ~: U' m. [6 e# w L第6章 重新组织函数 ! ?$ r2 T0 K4 j% G4 K2 E7 q
6.1 Extract Method(提炼函数) # I/ q: h4 |$ H: }- H
6.2 Inline Method(内联函数)
0 c& g' i* v1 F) L( r; ^6.3 Inline Temp(内联临时变量) # U+ z# a- J; }2 M$ W0 |4 R
6.4 Replace Temp with Query(以查询取代临时变量)
8 P) J0 L% ^/ s+ d' f0 t6.5 Introduce Explaining Variable(引入解释性变量) 6 y$ e; X4 W% N
6.6 Split Temporary Variable(分解临时变量) 4 E+ U" F6 ~ r: r) F
6.7 Remove Assignments to Parameters(移除对参数的赋值)
: p1 O$ G" `) g: j/ ~6.8 Replace Method with Method Object(以函数对象取代函数)
; Q' c! r) o7 g& I6.9 Substitute Algorithm(替换算法) . z, ^& ~% m- ~: ]0 ^7 X6 j; H
第7章 在对象之间搬移特性 ! ~) x7 @3 p6 k& S$ h" j; S
7.1 Move Method(搬移函数) 2 ~; A A/ ^3 _
7.2 Move Field(搬移字段)
" [8 M. P% Y* J7 \: p! p( O7.3 Extract Class(提炼类)
3 S; z* L1 _3 v# P7.4 Inline Class(将类内联化)
: B0 w( y% S4 C; ?* a, U% g7.5 Hide Delegate(隐藏“委托关系”) " ~' k; I# L& I# \1 V8 {
7.6 Remove Middle Man(移除中间人) # V; o4 A! @+ x
7.7 Introduce Foreign Method(引入外加函数)
7 h8 i: i7 c. C% c7.8 Introduce Local Extension(引入本地扩展)
" f6 U" ]! `$ i! I第8章 重新组织数据 5 f! }4 }- T+ G! m
8.1 Self Encapsulate Field(自封装字段) 1 p( ` ?8 g6 T$ X
8.2 Replace Data Value with Object(以对象取代数据值)
, J& _+ g, p/ n4 L8.3 Change Value to Reference(将值对象改为引用对象)
0 `% u# @* z9 E% }* a( h) S5 n8 a8.4 Change Reference to Value(将引用对象改为值对象) % p" v) ?1 D$ f' C. V" V
8.5 Replace Array with Object(以对象取代数组) ( ^ C e+ C# k; i! m
8.6 Duplicate Observed Data(复制“被监视数据”)
- L9 T9 a s/ I* e) _6 T: J8.7 Change Unidirectional Association to Bidirectional(将单向关联改为双向关联) 1 U! h6 K. B# s
8.8 Change Bidirectional Association to Unidirectional(将双向关联改为单向关联) 7 @2 K3 x& q5 k8 ]
8.9 Replace Magic Number with Symbolic Constant(以字面常量取代魔法数)
& E4 t( X7 H2 C0 V+ G3 u8.10 Encapsulate Field(封装字段)
6 `% z1 \( c& C- m8.11 Encapsulate Collection(封装集合)
+ E% @( g) @, L2 Z; s0 e% c8.12 Replace Record with Data Class(以数据类取代记录) ! Y! q; c5 c# W: |5 |$ U+ N; c( d
8.13 Replace Type Code with Class(以类取代类型码)
$ Q; n0 ~/ ^1 e$ @) N. d3 ]8.14 Replace Type Code with Subclasses(以子类取代类型码) ) R x) R8 |3 A G" ]
8.15 Replace Type Code with State/Strategy(以State/Strategy取代类型码)
/ m; P+ ^& d/ C6 W( {% ?" x8.16 Replace Subclass with Fields(以字段取代子类)
& t8 k+ S- |. ^' T: z第9章 简化条件表达式
2 F a! ?8 ?4 R& f& U6 l9.1 Decompose Conditional(分解条件表达式)
' o U) ~0 C% k+ s, @9.2 Consolidate Conditional Expression(合并条件表达式) 5 G; |# L* S) v7 H; X$ q
9.3 Consolidate Duplicate Conditional Fragments(合并重复的条件片段) ( i6 q4 p9 I! o& ~1 |: A- O
9.4 Remove Control Flag(移除控制标记)
$ e, R- ~6 t, v/ _ l& g/ A/ C" v9.5 Replace Nested Conditional with Guard Clauses(以卫语句取代嵌套条件表达式)
4 Q. _8 Q: V' w x& z7 [9.6 Replace Conditional with Polymorphism(以多态取代条件表达式) * t0 n) n, l6 g) v8 [7 L
9.7 Introduce Null Object(引入Null对象)
& O* b9 e& B* o( B1 {6 r- Y* b. A/ B9.8 Introduce Assertion(引入断言) ' d) I# I1 d! j
第10章 简化函数调用 1 f6 T3 q8 C, A
10.1 Rename Method(函数改名)
# @* p* c' x) q$ P/ Z$ _) n10.2 Add Parameter(添加参数)
9 U6 o7 y! C) p. Z, T& t% l% @. \10.3 Remove Parameter(移除参数)
& q& }2 d" f/ @" q8 {10.4 Separate Query from Modifier(将查询函数和修改函数分离)
# A, Y) u2 R+ H ]10.5 Parameterize Method(令函数携带参数) ^; U- \' A+ m6 {. }- ^ H
10.6 Replace Parameter with Explicit Methods(以明确函数取代参数)
/ y( ]% ~ p. y2 x2 u; j. o# V10.7 Preserve Whole Object(保持对象完整)
) Z$ V# \$ S# ~" `" {6 A10.8 Replace Parameter with Methods(以函数取代参数)
% z7 n5 h1 E6 f, [- Y; o* T& ~$ o10.9 Introduce Parameter Object(引入参数对象)
3 f6 g& y$ y: A$ @. L. x10.10 Remove Setting Method(移除设值函数)
% w7 D8 m2 r+ _4 k10.11 Hide Method(隐藏函数) 3 B& Y( L2 v& `8 ]* S6 h* @: g! r
10.12 Replace Constructor with Factory Method(以工厂函数取代构造函数)
1 L( J$ U2 @( Y10.13 Encapsulate Downcast(封装向下转型)
1 ]: u1 t+ a8 G" @& H2 j10.14 Replace Error Code with Exception(以异常取代错误码) 7 E; X8 p6 z7 ^% J( ]# V
10.15 Replace Exception with Test(以测试取代异常)
1 U* k" ^! h0 [1 z8 u第11章 处理概括关系
9 G: X3 P3 V% E8 f6 r11.1 Pull Up Field(字段上移) 3 k9 _3 G1 S* P+ d: n9 D9 `& @
11.2 Pull Up Method(函数上移) 1 D" n6 ?8 S6 u* K( c2 R6 U
11.3 Pull Up Constructor Body(构造函数本体上移)
- p/ e" ~! \: |# U11.4 Push Down Method(函数下移)
9 P6 b+ {5 f& \& C11.5 Push Down Field(字段下移) ; U. x( ?3 K0 |0 o, A
11.6 Extract Subclass(提炼子类) , b) `3 H5 F' F7 ?8 v
11.7 Extract Superclass(提炼超类)
) D) I6 J; ^ M; i9 h( Z7 {11.8 Extract Interface(提炼接口)
. B# [7 E0 \& p6 M0 t; p11.9 Collapse Hierarchy(折叠继承体系)
- V3 c- A7 q; B- s; _0 h1 K6 E% G( `11.10 Form Tem Plate Method(塑造模板函数) 8 c6 l6 b3 a' n- [
11.11 Replace Inheritance with Delegation(以委托取代继承) & _9 w- z9 x+ C& {
11.12 Replace Delegation with Inheritance(以继承取代委托) 2 v$ c+ @% K: Q7 V; M/ \1 j
第12章 大型重构
, m, W6 l, \1 g, Q/ ^+ a6 T12.1 Tease Apart Inheritance(梳理并分解继承体系) 4 Z" y) I+ n3 O% E
12.2 Convert Procedural Design to Objects(将过程化设计转化为对象设计)
9 k4 h1 K* G$ g/ `& M$ x& n12.3 Separate Domain from Presentation(将领域和表述/显示分离)
1 G6 s& j" {2 ]1 g- g' `12.4 Extract Hierarchy(提炼继承体系) ! D! g! R3 G: o7 ~
第13章 重构,复用与现实 # u0 i$ D& p' C8 P3 W3 s
13.1 现实的检验 ( k7 T" j' F- M6 ?4 {5 `
13.2 为什么开发者不愿意重构他们的程序 & ?1 F |+ W9 z2 w& \
13.3 再论现实的检验
/ T6 w* c3 z- C' I4 w; w: C13.4 重构的资源和参考资料
$ Z$ F# U# G$ X0 @+ p13.5 从重构联想到软件复用和技术传播 : u, P T8 ?1 f7 S# a
13.6 小结 9 q# ^; C2 r( Z! D! c1 g4 w
13.7 参考文献 % P1 z+ o5 L# A( L2 O* `
第14章 重构工具
4 n2 G$ z5 B: \; ]# ]9 H& S14.1 使用工具进行重构
9 a3 |- L" y0 c" C H14.2 重构工具的技术标准 5 Z& `8 h9 T/ L& ^2 W) ^2 i3 G
14.3 重构工具的实用标准 6 ?/ z2 ?" D2 p, f# p
14.4 小结 1 H) J5 Q, E* W4 e& q6 u" f1 Q; ]2 r
第15章 总结 9 l7 Y; U n* N
参考书目
" O1 q4 n, a+ ~& b要点列表
) U: E: R( @3 K. s9 P0 k" x索引 W4 \& t# d E" o+ t! O$ P1 |- ^
# o! q' [: n% F' v# @$ D
百度云盘下载地址(完全免费-绝无套路):
, @2 x# P1 |7 J# F+ ^: |) [ |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|