|
Java电子书:重构 改善既有代码的设计 Java语言版 PDF 电子书 Java吧 java8.com
F+ i& s) Z( c3 A
/ O& g, e" H2 w- g, q4 ~作者:[美]Martin Fowler 著,熊节 译出版社:人民邮电出版社出版时间:2015年08月
8 @) u" m' Q! a0 n; Y
% W5 F K7 `6 n8 d4 p: W
: }( e/ k0 Q% ~; g2 L4 b/ f* b$ Z编号:166-Java吧资源免费-P009【Java吧 java8.com】
5 F4 M' s2 f. J; z5 |# q! O" V
F* F! o7 G$ N4 O5 V# I& q% p0 I' T6 }) c7 f* ^5 U1 b0 J5 G h
* X* z& M" a' Q
目录:第1章 重构,个案例
+ T {/ @8 J# [! [1.1 起点
- `) L5 z+ }7 M( K3 U1.2 重构的步 * Q4 u# \0 Z. r1 s' U
1.3 分解并重组statement() ' R% v% E3 |( W. p% f `4 g
1.4 运用多态取代与价格相关的条件逻辑
* f; o1 K: }$ D b) G1.5 结语
( q0 S0 E( ?) F2 z# y; q: D- N第2章 重构原则 6 x1 G# u) a. m' D( L2 W8 _
2.1 何谓重构 / ?/ b8 _; b! ^5 |0 t6 n
2.2 为何重构 - j/ a, d3 Y# y% k. C4 @* \9 [
2.3 何时重构 % d' I! y3 u, T- i w* \
2.4 怎么对经理说 7 {( x3 a: p# d6 r
2.5 重构的难题
) D& B% {( O+ b) ?2.6 重构与设计
: S0 t" G& [( D# X t2.7 重构与性能
3 X4 N8 u" @2 @2.8 重构起源何处 ' x3 @/ o5 b/ v: J3 t+ v* k
第3章 代码的坏味道 ; @% @, Q9 Y: M
3.1 Duplicated Code(重复代码)
$ N5 O( \: j& R6 U9 V4 J3.2 Long Method(过长函数)
' T* a3 a0 E$ h8 n# O; d+ z3.3 Large Class(过大的类)
! I6 _. x! M/ }3.4 Long Parameter List(过长参数列)
5 O) b- j8 {: z7 G! P0 R3.5 Divergent Change(发散式变化) $ _7 y' s+ @1 A
3.6 Shotgun Surgery(霰弹式修改)
" s1 t# J* }0 L- J* ?, [" r( \3.7 Feature Envy(依恋情结)
1 a/ w" q! E- B& a/ [$ r/ G/ M3.8 Data Clumps(数据泥团)
1 J7 J3 ^# r- c4 J3.9 Primitive Obsession(基本类型偏执) I2 h" w& T# U, k, t/ \
3.10 Switch Statements(switch惊悚现身) & h& ?$ r0 _2 T7 P7 y' D
3.11 Parallel InheritanceHierarchies(平行继承体系) : k: t+ O/ b7 Q
3.12 Lazy Class(冗赘类)
, E9 @" d5 x4 G6 h4 \2 Q3.13 Speculative Generality(夸夸其谈未来性) * P4 S8 |7 L% B! A9 P5 x+ U& H# C; U
3.14 Temporary Field(令人迷惑的暂时字段)
- z& {& i1 u* B' G9 V, s# N: _3.15 Message Chains(过度耦合的消息链)
% F. Z% e* ~' o3 O- u& y3.16 Middle Man(中间人) ( v, r. }# [3 b: }/ _$ I
3.17 Inappropriate Intimacy(狎昵关系)
# V7 C; d- O1 Y) O1 v S+ k3.18 Alternative Classes with Different Interfaces(异曲同工的类) , h$ ~9 R6 n V: _: B
3.19 Incomplete Library Class(不完美的库类)
( H- O, ?( I$ R8 Y6 Y% H, d3.20 Data Class(纯稚的数据类)
8 K$ p% h. N9 c: z3.21 Refused Bequest(被拒绝的遗赠)
' j4 Y$ i* h0 O8 j& H3.22 Comments(过多的注释)
* w& M3 ]3 q0 A第4章 构筑测试体系
; O) q2 s2 S7 x& B/ l2 F5 G' \4.1 自测试代码的价值 6 }$ B7 j' x# E' C" t" z
4.2 JUnit测试框架
& n! i* c. \6 U4.3 添加更多测试 2 r/ C% V5 X' f; |5 l% c7 u5 b. {, ]
第5章 重构列表
& J3 Z" W, d! A5.1 重构的记录格式 7 _" c& D3 N0 A! J5 X9 m: Y5 |+ w1 r7 C
5.2 寻找引用点
0 X5 X" X. d z- N5.3 这些重构手法有多成熟
% V; S8 V; t6 S' t" o9 c, j第6章 重新组织函数
' r" j3 O1 ^# j: D0 k; |9 h* ~3 D6.1 Extract Method(提炼函数) % @& U! A* m# L) B7 H
6.2 Inline Method(内联函数) % `* B9 i4 \ r9 B) r
6.3 Inline Temp(内联临时变量) 4 B9 N" `9 q- ^1 Y% t( f
6.4 Replace Temp with Query(以查询取代临时变量)
! B5 T `8 _5 k# K# k( u6.5 Introduce Explaining Variable(引入解释性变量)
8 y! D; C: m* K" Q6.6 Split Temporary Variable(分解临时变量)
* @6 j6 Y/ H6 i7 j6 K9 y6.7 Remove Assignments to Parameters(移除对参数的赋值)
5 i; Y8 Y$ A" {4 ~6.8 Replace Method with Method Object(以函数对象取代函数) ' i; G+ a; R# n
6.9 Substitute Algorithm(替换算法)
; S1 k7 a4 y, u' T) H( [第7章 在对象之间搬移特性
( |& c) ^) o# t8 c7.1 Move Method(搬移函数) 5 i& M6 I, {/ H1 f& p/ h
7.2 Move Field(搬移字段)
5 ]5 ?+ Q$ v1 o8 @% @! M7.3 Extract Class(提炼类) ; m1 r- r2 @& d; O4 F( \* j
7.4 Inline Class(将类内联化)
: g# B4 e3 }- Q+ F2 d# R7.5 Hide Delegate(隐藏“委托关系”) # o' n8 a! n# K5 z
7.6 Remove Middle Man(移除中间人) $ M7 I* j" {* }& m+ B7 w$ H' q. z8 A
7.7 Introduce Foreign Method(引入外加函数) $ r+ ~/ g( {3 x n: S
7.8 Introduce Local Extension(引入本地扩展) $ g, s, f$ |2 M1 X
第8章 重新组织数据
4 E$ [3 t/ F9 ?) p7 v. `8.1 Self Encapsulate Field(自封装字段) 0 _+ @5 s. q H
8.2 Replace Data Value with Object(以对象取代数据值) ' [* |1 m+ X- ^; q- c' j6 D
8.3 Change Value to Reference(将值对象改为引用对象) / G W+ m' r, }8 `5 i k
8.4 Change Reference to Value(将引用对象改为值对象)
. S, O9 c2 F% ^" O5 J* e8 }8.5 Replace Array with Object(以对象取代数组)
8 `9 p3 |. S! P) Q/ i8.6 Duplicate Observed Data(复制“被监视数据”)
) V0 s2 B' a2 \2 |5 r5 `8.7 Change Unidirectional Association to Bidirectional(将单向关联改为双向关联)
/ q: u6 ^1 b' j8.8 Change Bidirectional Association to Unidirectional(将双向关联改为单向关联)
5 _$ H; G% @2 D$ P! \" ]9 l8.9 Replace Magic Number with Symbolic Constant(以字面常量取代魔法数) . q" G5 M( b! Y e
8.10 Encapsulate Field(封装字段) % U' A: k8 U' ? S# o
8.11 Encapsulate Collection(封装集合)
$ r% {+ r6 t, R8.12 Replace Record with Data Class(以数据类取代记录) 2 p1 T0 Z" u0 d2 Z, i5 [
8.13 Replace Type Code with Class(以类取代类型码) 0 _% P9 n1 l6 B, O$ P
8.14 Replace Type Code with Subclasses(以子类取代类型码)
T1 r6 P' \3 ?3 P! L, r" n! x8.15 Replace Type Code with State/Strategy(以State/Strategy取代类型码) * {# F8 p7 E6 T; Y
8.16 Replace Subclass with Fields(以字段取代子类)
; M6 u1 b+ M9 W2 g( ]7 l. G第9章 简化条件表达式
: v, ]+ s4 p0 }; @9 A3 B/ F# q- X9.1 Decompose Conditional(分解条件表达式)
% x3 o4 d0 ?/ G6 l0 Q8 l% x4 g9.2 Consolidate Conditional Expression(合并条件表达式) 9 v+ m' N" Y* S. ]$ `+ D+ i ~
9.3 Consolidate Duplicate Conditional Fragments(合并重复的条件片段) & Z' A5 m% @8 d5 z! _3 I" q. u
9.4 Remove Control Flag(移除控制标记) " g! E2 ^# ]0 B9 c# T; \
9.5 Replace Nested Conditional with Guard Clauses(以卫语句取代嵌套条件表达式)
0 D# _# ^0 k9 F1 _7 D9.6 Replace Conditional with Polymorphism(以多态取代条件表达式)
8 _# q6 X; Y. Y+ `9.7 Introduce Null Object(引入Null对象)
" M$ }8 q/ S) ^9 `) P& u. {2 m% h, B9.8 Introduce Assertion(引入断言) ; m) ]# @) y/ Q# n) G/ ~
第10章 简化函数调用 1 W, O" K$ @: b8 ?3 b
10.1 Rename Method(函数改名) " B* i; ~9 y7 M5 _& o" w7 Q: t* s; m$ I
10.2 Add Parameter(添加参数)
! V6 p$ Z/ ^. J. w# u- V R9 `* r+ x10.3 Remove Parameter(移除参数) 7 G+ S, A& ]* [; B2 t8 k
10.4 Separate Query from Modifier(将查询函数和修改函数分离) : s$ Y* W2 j/ L* N
10.5 Parameterize Method(令函数携带参数)
$ q5 J2 Z* o& `0 b& u: U10.6 Replace Parameter with Explicit Methods(以明确函数取代参数)
* o! T7 z* P0 X c8 y10.7 Preserve Whole Object(保持对象完整)
& A; O% N1 G% w5 U1 m7 Z10.8 Replace Parameter with Methods(以函数取代参数)
1 _; N% Z v6 g) `0 O+ y10.9 Introduce Parameter Object(引入参数对象) ' _" d/ a3 S- S' J+ j
10.10 Remove Setting Method(移除设值函数) }0 q2 y# z( A! O, J
10.11 Hide Method(隐藏函数) : E' z/ G4 G2 N# s5 R+ ^
10.12 Replace Constructor with Factory Method(以工厂函数取代构造函数) 4 h+ n% K9 ~% Q1 ~" X5 b
10.13 Encapsulate Downcast(封装向下转型) : m; v! F& L$ v5 `
10.14 Replace Error Code with Exception(以异常取代错误码)
. j4 ^$ Y- N, M8 u1 k10.15 Replace Exception with Test(以测试取代异常) : f6 p, |) ?3 S* C# S. K
第11章 处理概括关系 ' W" S2 Q8 D( r( k4 `
11.1 Pull Up Field(字段上移) 2 @/ U: a/ A9 H2 B- y
11.2 Pull Up Method(函数上移) 9 Q0 l+ d- Z& p* M- m6 L
11.3 Pull Up Constructor Body(构造函数本体上移)
1 Y. R; ~- T* V1 l4 K+ G% I5 b11.4 Push Down Method(函数下移) - i; m% O7 ]2 j6 H$ L
11.5 Push Down Field(字段下移)
3 h& | q9 q+ z/ _" R. g& y5 q. g11.6 Extract Subclass(提炼子类) 9 n T) A4 o% E, b5 N
11.7 Extract Superclass(提炼超类)
! V1 ]; }2 h8 ]- |( w5 b11.8 Extract Interface(提炼接口)
/ }9 d# ~ D) P# f6 j7 A; g" O/ K11.9 Collapse Hierarchy(折叠继承体系)
1 ^9 Q) x9 l+ J' O11.10 Form Tem Plate Method(塑造模板函数) " B* [1 M. I5 d& L$ Z- d( a
11.11 Replace Inheritance with Delegation(以委托取代继承)
( v2 D4 C: j/ o11.12 Replace Delegation with Inheritance(以继承取代委托) 4 F( N b( h2 J$ w
第12章 大型重构 / O6 G W! `* v) \& y+ K
12.1 Tease Apart Inheritance(梳理并分解继承体系)
6 X$ s5 h$ X8 ?( h12.2 Convert Procedural Design to Objects(将过程化设计转化为对象设计)
! P6 e+ F! u, \1 _1 j12.3 Separate Domain from Presentation(将领域和表述/显示分离) : o- m }# m5 x/ O3 A' I
12.4 Extract Hierarchy(提炼继承体系)
" A4 @5 p5 A7 r+ |第13章 重构,复用与现实
4 ]8 x- [% h! X& {6 v2 _( y! I$ r) s13.1 现实的检验 3 e+ c. [ o3 p
13.2 为什么开发者不愿意重构他们的程序
, S9 e0 Z$ Z3 ~13.3 再论现实的检验
0 f" O: m% r! c13.4 重构的资源和参考资料 % t( o, k+ A: b1 m( ~
13.5 从重构联想到软件复用和技术传播
& |( n7 Q) h0 G8 @13.6 小结
1 [, \& n9 W5 j3 n13.7 参考文献
5 ~' o9 A# u4 p, v" V9 }5 N1 S第14章 重构工具
6 d, H1 W1 Z; o14.1 使用工具进行重构
1 T+ R# V u1 u6 O, H9 @2 Y0 m# r% D1 R14.2 重构工具的技术标准 , ^! ^ a/ r+ F: X4 r8 y
14.3 重构工具的实用标准
' b( [5 F2 z& E' L) Y% C. H14.4 小结
# K1 i" p3 u) [. v! s# g1 o第15章 总结 ' L9 f( i$ D0 V$ @; E
参考书目 + q) ~6 Y+ p+ K. R+ [" C
要点列表 - J x8 O) _! D9 q, M
索引. I6 [2 T& g+ E0 f. p: J( w6 _
# }5 u% Y4 t# p* W0 n# _
百度云盘下载地址(完全免费-绝无套路):* b1 i, U0 _& j- d+ z0 Q" h: n3 ~+ K
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|