|
Java电子书:重构 改善既有代码的设计 Java语言版 PDF 电子书 Java吧 java8.com
6 C) T' F. V) ?4 d' {. `; u: r% z6 j+ }# i' m6 x- X
作者:[美]Martin Fowler 著,熊节 译出版社:人民邮电出版社出版时间:2015年08月 3 a. W3 t7 a0 J4 X3 \
5 n* I. Q- a) P: S# F/ c' c, y9 ~2 x( U: T2 ~. j# p' w, z/ m
编号:166-Java吧资源免费-P009【Java吧 java8.com】
& E; y8 z3 x X# J) j9 u- M7 ~" R
! B) i4 M) B X: V' t5 V/ v
7 O1 g. l. h+ [: t- u目录:第1章 重构,个案例 / \) c' ~3 z4 V( `% g% Q+ t
1.1 起点 % m( D- R3 d( n- c- ~% L0 z
1.2 重构的步 6 d N9 z6 X: @6 T
1.3 分解并重组statement() ) R4 |. Y* O4 m. Y/ z/ S2 q4 [
1.4 运用多态取代与价格相关的条件逻辑 : q( x y) X. `) ^# p9 L( _1 h
1.5 结语 . Z( @( |1 |& z! _7 I
第2章 重构原则 + ?: F; M0 v0 U
2.1 何谓重构
2 ?% @! {2 t; x9 `, Z8 E2 \% o2.2 为何重构 ) p1 `9 }) \0 T0 N0 O
2.3 何时重构
0 d, s- T1 J, a6 z4 j9 L2.4 怎么对经理说 4 d0 h1 r- H. G) @- S
2.5 重构的难题
; ^( ^5 v0 r, x) T6 ~, h2.6 重构与设计
' @7 @( |# T" p3 P2.7 重构与性能 " ^; ~/ T3 j+ R9 `
2.8 重构起源何处 " E1 D- p: i: B0 z& x( u( e
第3章 代码的坏味道
* Z% x- H y% m3 a3.1 Duplicated Code(重复代码)
: @3 o. `6 y& q3 d6 N; R5 q" j3.2 Long Method(过长函数) 9 h) a0 S+ n |+ T: e
3.3 Large Class(过大的类)
2 n0 |3 T l! c4 P2 z3.4 Long Parameter List(过长参数列) % @7 \4 S, f1 p3 u# x; _, l. u
3.5 Divergent Change(发散式变化) # A4 x9 {* `: F
3.6 Shotgun Surgery(霰弹式修改)
# F* A& e+ g8 ^3.7 Feature Envy(依恋情结)
# h% I/ D+ _8 ^+ y# q* h4 w3.8 Data Clumps(数据泥团) 6 f$ v. N9 _9 J8 I9 J4 B- Z3 y
3.9 Primitive Obsession(基本类型偏执)
( e5 Y) n- z+ |( V8 W; H+ W3.10 Switch Statements(switch惊悚现身) ; F k- V1 A$ O! z r
3.11 Parallel InheritanceHierarchies(平行继承体系)
4 b4 u# y8 y; [0 I5 n0 C; b$ u3.12 Lazy Class(冗赘类)
4 g% G' w. L& w1 N: v/ N3.13 Speculative Generality(夸夸其谈未来性) " m- t! T0 R/ R6 `* V: o( l
3.14 Temporary Field(令人迷惑的暂时字段) 9 W8 I3 d3 F3 c3 K( s
3.15 Message Chains(过度耦合的消息链)
9 q9 ?7 ?% b$ ^1 r3.16 Middle Man(中间人)
9 c7 w, T( f% Y2 P- b3.17 Inappropriate Intimacy(狎昵关系)
4 \7 ]3 |2 i( \: k6 E7 I3.18 Alternative Classes with Different Interfaces(异曲同工的类) , D* C2 W/ s$ i' F
3.19 Incomplete Library Class(不完美的库类)
) b8 W, {1 I0 `3 |/ D/ T/ [0 J4 _2 ~( z3.20 Data Class(纯稚的数据类) . [/ R7 ~$ d9 F) k8 K, ?0 c% `& M. S
3.21 Refused Bequest(被拒绝的遗赠)
7 Q$ ?. L/ p6 K! w3.22 Comments(过多的注释)
# O# k, y2 b' }0 D1 q: g第4章 构筑测试体系 ( C7 \3 N3 }2 L" ~7 U$ \ G
4.1 自测试代码的价值 3 S5 M, r! ]2 {0 d7 o# T7 S
4.2 JUnit测试框架
& D* M- S5 p$ o; [0 ` w4.3 添加更多测试 ; B* g+ x2 Z& D6 ^* B& Y/ K- M7 ]
第5章 重构列表 % M9 h* r6 @6 a; U) v
5.1 重构的记录格式 8 m9 R& ?9 H" a
5.2 寻找引用点 ; C U' ?7 v+ }+ G/ s
5.3 这些重构手法有多成熟
9 Y4 c7 M7 Q3 X- K! R6 \第6章 重新组织函数
4 ~" D) d& V& b0 h6.1 Extract Method(提炼函数)
3 l Q( }8 N) M6.2 Inline Method(内联函数) ( `, x0 G6 Y t; N" f( R( j& w! Z' @
6.3 Inline Temp(内联临时变量) 9 q. U. s! \7 S4 U8 K: \
6.4 Replace Temp with Query(以查询取代临时变量)
7 t4 R ^$ w' R" o( i: y4 w6.5 Introduce Explaining Variable(引入解释性变量) , j, p3 f8 q) p0 i1 f$ z+ T
6.6 Split Temporary Variable(分解临时变量)
2 H9 T* E4 W! k5 q( d& O) r4 u6.7 Remove Assignments to Parameters(移除对参数的赋值) & g1 @! |+ V+ V4 R% q7 t7 r, r* l$ M
6.8 Replace Method with Method Object(以函数对象取代函数) 2 Q! ?( k& i2 c5 c
6.9 Substitute Algorithm(替换算法) ( a4 c. e) R; B, N8 A7 D
第7章 在对象之间搬移特性
7 d# D8 U3 Z9 r2 g7 W7.1 Move Method(搬移函数)
4 Q! f4 N$ N) n8 ?9 |7.2 Move Field(搬移字段) 7 I! k, D( H! R
7.3 Extract Class(提炼类)
# k6 v1 h8 |% \1 z7.4 Inline Class(将类内联化) $ z% C/ R- V0 S: [
7.5 Hide Delegate(隐藏“委托关系”) ' |0 d0 a& a9 C; r& x$ X. v- q' ?
7.6 Remove Middle Man(移除中间人)
! ]& G" J* G$ E7.7 Introduce Foreign Method(引入外加函数)
7 T4 o( V* q0 k! e9 o7.8 Introduce Local Extension(引入本地扩展)
3 e3 L" H: j4 s- Y1 D1 d第8章 重新组织数据
6 v3 I# v, Z' y2 U8.1 Self Encapsulate Field(自封装字段)
& }& {3 W: E$ i; g8.2 Replace Data Value with Object(以对象取代数据值)
6 F R4 k1 i; O' K8.3 Change Value to Reference(将值对象改为引用对象) 8 Y' D# G4 W! I9 S9 b8 F/ ^
8.4 Change Reference to Value(将引用对象改为值对象)
; g( b7 R' W/ k* m( K8.5 Replace Array with Object(以对象取代数组)
% ~- h: J. U- N/ m' N8.6 Duplicate Observed Data(复制“被监视数据”)
7 l c/ k2 V0 V. V& M8.7 Change Unidirectional Association to Bidirectional(将单向关联改为双向关联)
% t. K# r5 M8 R. W' x& @, o8.8 Change Bidirectional Association to Unidirectional(将双向关联改为单向关联) ' x: U+ V- W5 F0 q, O2 ~5 u
8.9 Replace Magic Number with Symbolic Constant(以字面常量取代魔法数)
0 x$ V0 y7 B9 h& B8.10 Encapsulate Field(封装字段) ( o1 G" V( f1 X9 `
8.11 Encapsulate Collection(封装集合) ' H3 s e1 ~, k& h; D
8.12 Replace Record with Data Class(以数据类取代记录) ) {# U) n3 A3 K! Y8 T- T* W
8.13 Replace Type Code with Class(以类取代类型码) ! h& Z! a( @ _$ m1 D) ^
8.14 Replace Type Code with Subclasses(以子类取代类型码) # I' C* A% q, H9 C- `0 ^% ^
8.15 Replace Type Code with State/Strategy(以State/Strategy取代类型码) 3 O3 C' [2 ?& e2 x' h
8.16 Replace Subclass with Fields(以字段取代子类)
8 u9 W e4 i! y- E第9章 简化条件表达式 3 e* S- u1 V$ x' H
9.1 Decompose Conditional(分解条件表达式) 0 \9 b/ _) _* x8 i+ N
9.2 Consolidate Conditional Expression(合并条件表达式) % W. S) E; f; g* o% `
9.3 Consolidate Duplicate Conditional Fragments(合并重复的条件片段)
# {/ M. K, m0 n9.4 Remove Control Flag(移除控制标记)
$ U8 `9 a5 g- I! J8 S: q, W9.5 Replace Nested Conditional with Guard Clauses(以卫语句取代嵌套条件表达式)
: U' _. x, `7 M) q9.6 Replace Conditional with Polymorphism(以多态取代条件表达式) & [) ]8 B3 g# u5 P/ X
9.7 Introduce Null Object(引入Null对象) 2 w; `1 _, P) r/ J8 w0 G
9.8 Introduce Assertion(引入断言) 2 O. Z& Y. i! y. h) [
第10章 简化函数调用 ' u: B- U0 y8 i
10.1 Rename Method(函数改名)
, A* i7 B6 O7 h! O9 q10.2 Add Parameter(添加参数)
0 z( O" ] b8 h% P& c" ]1 I p10.3 Remove Parameter(移除参数) ; S1 Z { d$ P( O
10.4 Separate Query from Modifier(将查询函数和修改函数分离) 1 ]& ~+ H* z7 q
10.5 Parameterize Method(令函数携带参数) ; ]- m, y7 c( k* K% P
10.6 Replace Parameter with Explicit Methods(以明确函数取代参数)
" }- X) {% v' {: k4 E10.7 Preserve Whole Object(保持对象完整) ( p& o0 @- \7 I( I$ \. C
10.8 Replace Parameter with Methods(以函数取代参数)
) }4 X& j! w$ s) ^$ k, i10.9 Introduce Parameter Object(引入参数对象) , ?( M- E z7 f9 E
10.10 Remove Setting Method(移除设值函数) + W7 ^% J6 k$ R' c; E
10.11 Hide Method(隐藏函数)
0 R' Q( v5 b8 n R/ \10.12 Replace Constructor with Factory Method(以工厂函数取代构造函数) ' ~8 G n6 K( ^' K
10.13 Encapsulate Downcast(封装向下转型)
% y1 y5 S" T/ [ @" e$ [; [& y w10.14 Replace Error Code with Exception(以异常取代错误码)
# c" n8 w- z4 _9 a10.15 Replace Exception with Test(以测试取代异常)
, F8 F5 |: o% L- z0 M0 a. L# J* e第11章 处理概括关系 . P3 @: S: e6 q" v( m
11.1 Pull Up Field(字段上移) 1 N9 F3 E4 j5 a
11.2 Pull Up Method(函数上移) 3 ^: a$ X6 O/ }/ S% }* N0 v. b
11.3 Pull Up Constructor Body(构造函数本体上移)
) ~# h- ?6 D0 K2 R5 _" ?11.4 Push Down Method(函数下移)
- g1 X8 V" Q. H' }9 U) P2 S& U11.5 Push Down Field(字段下移) " O( p! M) P# x7 f" A6 O" @
11.6 Extract Subclass(提炼子类)
0 _% Y2 J ~! o6 `11.7 Extract Superclass(提炼超类) - l# Z7 T o1 r! p# m8 R( w- d
11.8 Extract Interface(提炼接口)
5 W% n0 k9 p: q11.9 Collapse Hierarchy(折叠继承体系) + C( ^4 |, ]/ X, g6 v' d; R
11.10 Form Tem Plate Method(塑造模板函数) / B: V- l6 U! ], N4 d2 ~
11.11 Replace Inheritance with Delegation(以委托取代继承)
Q, C4 L; P4 w; `7 \# M9 x9 Z11.12 Replace Delegation with Inheritance(以继承取代委托) 2 e! x! ?5 c1 h: ?' B
第12章 大型重构
9 d6 [- M, `( _& L$ b12.1 Tease Apart Inheritance(梳理并分解继承体系)
3 v* x* S( K- z0 f# H0 _ h12.2 Convert Procedural Design to Objects(将过程化设计转化为对象设计)
( c3 [3 h7 i% p12.3 Separate Domain from Presentation(将领域和表述/显示分离)
. o2 m) Y# l2 F a12.4 Extract Hierarchy(提炼继承体系)
9 L. c9 O. b% B6 Y第13章 重构,复用与现实 6 j8 O* Y, V/ n2 [* G
13.1 现实的检验
! w/ v& |8 L" W% e5 \$ y& ]13.2 为什么开发者不愿意重构他们的程序
1 o' I, V; G4 s `9 z13.3 再论现实的检验
y! S# C6 `1 e0 \4 }13.4 重构的资源和参考资料 7 V4 S- \5 L) _5 S( }" M
13.5 从重构联想到软件复用和技术传播 0 D; I) K, Q4 n$ \
13.6 小结 ! v' b1 H$ K2 k/ S9 o% i0 Y
13.7 参考文献 3 c" z. n5 A0 V% a& H5 n9 s) L1 S) V
第14章 重构工具 ' X1 L+ Y+ R8 r% l7 t( |4 I
14.1 使用工具进行重构
7 ~6 L" R: M4 @& M# }14.2 重构工具的技术标准
" b4 j# x, w- Y- E' |0 v; u; C/ T14.3 重构工具的实用标准
8 z8 S, p5 `& X1 R) ^14.4 小结
) U# T* k9 {* V+ X' K# Y! e9 }第15章 总结
4 [+ X9 C( @6 o# `" N参考书目 & _" a7 Z( Y( N U( Z1 f
要点列表 2 {6 @8 O9 Y3 h9 k* Z! ]' H
索引
! U2 I, L( {% B9 n/ x0 q
2 ^# S& H; z6 ]; e6 F, H百度云盘下载地址(完全免费-绝无套路):
* I5 z0 R2 V& F8 I* r |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|