Clean Code:A Handbook of Agile Software Craftsmanship
BRAND: PEARSON
Publisher: | Pearson |
Author: | Robert C. Martin |
Edition: | (August 1, 2008) © 2009 |
eBook ISBN: | 9780136083252 |
Print ISBN: | 9780132350884 |
Type: | 1 Year Subscription. Dành cho Cá nhân |
eBook edition. 1 Year Subscription. Dành cho Cá nhân | Trường ĐH, Nhóm, Thư Viện: Gọi 0915920514 để báo giá Pearson, Vital Source eBook hoặc mua Sách In
See what in the box
Mô tả sản phẩm
Ngay cả mã xấu cũng có thể hoạt động. Nhưng nếu mã không sạch, nó có thể khiến tổ chức phát triển phải đầu hàng. Hàng năm, vô số giờ và tài nguyên đáng kể bị mất do viết mã kém. Nhưng nó không nhất thiết phải như vậy.
Chuyên gia phần mềm nổi tiếng Robert C. Martin trình bày một mô hình mang tính cách mạng với Mã sạch: Sổ tay về tay nghề thủ công phần mềm linh hoạt. Martin đã hợp tác với các đồng nghiệp của mình từ Object Mentor để chắt lọc phương pháp làm sạch mã nhanh nhẹn nhất của họ thành một cuốn sách sẽ thấm nhuần vào bạn những giá trị của một nghệ nhân phần mềm và giúp bạn trở thành một lập trình viên giỏi hơn—nhưng chỉ khi bạn làm việc chăm chỉ. vào đó.
Bạn sẽ làm loại công việc gì? Bạn sẽ đọc mã—rất nhiều mã. Và bạn sẽ được thử thách suy nghĩ về điều gì đúng và điều gì sai trong mã đó. Quan trọng hơn, bạn sẽ được thử thách đánh giá lại các giá trị nghề nghiệp và sự cam kết của bạn đối với nghề của mình.
Clean Code được chia thành ba phần. Phần đầu tiên mô tả các nguyên tắc, mô hình và cách thực hành viết mã sạch. Phần thứ hai bao gồm một số nghiên cứu trường hợp có độ phức tạp ngày càng tăng. Mỗi nghiên cứu điển hình là một bài tập làm sạch mã—chuyển đổi cơ sở mã có một số vấn đề thành một cơ sở mã hợp lý và hiệu quả. Phần thứ ba là phần thưởng: một chương duy nhất chứa danh sách các phương pháp phỏng đoán và “mùi” được thu thập trong khi tạo các nghiên cứu điển hình. Kết quả là một cơ sở kiến thức mô tả cách chúng ta suy nghĩ khi viết, đọc và dọn dẹp mã.
Người đọc sẽ không hiểu được cuốn sách này
Cách phân biệt mã tốt và mã xấu
Cách viết code tốt và cách chuyển code xấu thành code tốt
Cách tạo tên hay, chức năng tốt, đồ vật tốt, lớp tốt
Cách định dạng mã để dễ đọc nhất
Cách triển khai xử lý lỗi hoàn chỉnh mà không che khuất logic mã
Cách kiểm thử đơn vị và thực hành phát triển theo hướng kiểm thử
Foreword xix
Introduction xxv
On the Cover xxix
Chapter 1: Clean Code 1
There Will Be Code 2
Bad Code 3
The Total Cost of Owning a Mess 4
Schools of Thought 12
We Are Authors 13
The Boy Scout Rule 14
Prequel and Principles 15
Conclusion 15
Bibliography 15
Chapter 2: Meaningful Names 17
Introduction 17
Use Intention-Revealing Names 18
Avoid Disinformation 19
Make Meaningful Distinctions 20
Use Pronounceable Names 21
Use Searchable Names 22
Avoid Encodings 23
Avoid Mental Mapping 25
Class Names 25
Method Names 25
Don’t Be Cute 26
Pick One Word per Concept 26
Don’t Pun 26
Use Solution Domain Names 27
Use Problem Domain Names 27
Add Meaningful Context 27
Don’t Add Gratuitous Context 29
Final Words 30
Chapter 3: Functions 31
Small! 34
Do One Thing 35
One Level of Abstraction per Function 36
Switch Statements 37
Use Descriptive Names 39
Function Arguments 40
Have No Side Effects 44
Command Query Separation 45
Prefer Exceptions to Returning Error Codes 46
Don’t Repeat Yourself 48
Structured Programming 48
How Do You Write Functions Like This? 49
Conclusion 49
SetupTeardownIncluder 50
Bibliography 52
Chapter 4: Comments 53
Comments Do Not Make Up for Bad Code 55
Explain Yourself in Code 55
Good Comments 55
Bad Comments 59
Bibliography 74
Chapter 5: Formatting 75
The Purpose of Formatting 76
Vertical Formatting 76
Horizontal Formatting 85
Team Rules 90
Uncle Bob’s Formatting Rules 90
Chapter 6: Objects and Data Structures 93
Data Abstraction 93
Data/Object Anti-Symmetry 95
The Law of Demeter 97
Data Transfer Objects 100
Conclusion 101
Bibliography 101
Chapter 7: Error Handling 103
Use Exceptions Rather Than Return Codes 104
Write Your Try-Catch-Finally Statement First 105
Use Unchecked Exceptions 106
Provide Context with Exceptions 107
Define Exception Classes in Terms of a Caller’s Needs 107
Define the Normal Flow 109
Don’t Return Null 110
Don’t Pass Null 111
Conclusion 112
Bibliography 112
Chapter 8: Boundaries 113
Using Third-Party Code 114
Exploring and Learning Boundaries 116
Learning log4j 116
Learning Tests Are Better Than Free 118
Using Code That Does Not Yet Exist 118
Clean Boundaries 120
Bibliography 120
Chapter 9: Unit Tests 121
The Three Laws of TDD 122
Keeping Tests Clean 123
Clean Tests 124
One Assert per Test 130
F.I.R.S.T. 132
Conclusion 133
Bibliography 133
Chapter 10: Classes 135
Class Organization 136
Classes Should Be Small! 136
Organizing for Change 147
Bibliography 151
Chapter 11: Systems 153
How Would You Build a City? 154
Separate Constructing a System from Using It 154
Scaling Up 157
Java Proxies 161
Pure Java AOP Frameworks 163
AspectJ Aspects 166
Test Drive the System Architecture 166
Optimize Decision Making 167
Use Standards Wisely, When They Add Demonstrable Value 168
Systems Need Domain-Specific Languages 168
Conclusion 169
Bibliography 169
Chapter 12: Emergence 171
Getting Clean via Emergent Design 171
Simple Design Rule 1: Runs All the Tests 172
Simple Design Rules 2—4: Refactoring 172
No Duplication 173
Expressive 175
Minimal Classes and Methods 176
Conclusion 176
Bibliography 176
Chapter 13: Concurrency 177
Why Concurrency? 178
Challenges 180
Concurrency Defense Principles 180
Know Your Library 182
Know Your Execution Models 183
Beware Dependencies Between Synchronized Methods 185
Keep Synchronized Sections Small 185
Writing Correct Shut-Down Code Is Hard 186
Testing Threaded Code 186
Conclusion 190
Bibliography 191
Chapter 14: Successive Refinement 193
Args Implementation 194
Args: The Rough Draft 201
String Arguments 214
Conclusion 250
Chapter 15: JUnit Internals 251
The JUnit Framework 252
Conclusion 265
Chapter 16: Refactoring SerialDate 267
First, Make It Work 268
Then Make It Right 270
Conclusion 284
Bibliography 284
Chapter 17: Smells and Heuristics 285
Comments 286
Environment 287
Functions 288
General 288
Java 307
Names 309
Tests 313
Conclusion 314
Bibliography 315
Appendix A: Concurrency II 317
Client/Server Example 317
Possible Paths of Execution 321
Knowing Your Library 326
Dependencies Between Methods Can Break Concurrent Code 329
Increasing Throughput 333
Deadlock 335
Testing Multithreaded Code 339
Tool Support for Testing Thread-Based Code 342
Conclusion 342
Tutorial: Full Code Examples 343
Appendix B: org.jfree.date.SerialDate 349
Appendix C: Cross References of Heuristics 409
Epilogue 411
Index 413
Ngay cả mã xấu cũng có thể hoạt động. Nhưng nếu mã không sạch, nó có thể khiến tổ chức phát triển phải đầu hàng. Hàng năm, vô số giờ và tài nguyên đáng kể bị mất do viết mã kém. Nhưng nó không nhất thiết phải như vậy.
Chuyên gia phần mềm nổi tiếng Robert C. Martin trình bày một mô hình mang tính cách mạng với Mã sạch: Sổ tay về tay nghề thủ công phần mềm linh hoạt. Martin đã hợp tác với các đồng nghiệp của mình từ Object Mentor để chắt lọc phương pháp làm sạch mã nhanh nhẹn nhất của họ thành một cuốn sách sẽ thấm nhuần vào bạn những giá trị của một nghệ nhân phần mềm và giúp bạn trở thành một lập trình viên giỏi hơn—nhưng chỉ khi bạn làm việc chăm chỉ. vào đó.
Bạn sẽ làm loại công việc gì? Bạn sẽ đọc mã—rất nhiều mã. Và bạn sẽ được thử thách suy nghĩ về điều gì đúng và điều gì sai trong mã đó. Quan trọng hơn, bạn sẽ được thử thách đánh giá lại các giá trị nghề nghiệp và sự cam kết của bạn đối với nghề của mình.
Clean Code được chia thành ba phần. Phần đầu tiên mô tả các nguyên tắc, mô hình và cách thực hành viết mã sạch. Phần thứ hai bao gồm một số nghiên cứu trường hợp có độ phức tạp ngày càng tăng. Mỗi nghiên cứu điển hình là một bài tập làm sạch mã—chuyển đổi cơ sở mã có một số vấn đề thành một cơ sở mã hợp lý và hiệu quả. Phần thứ ba là phần thưởng: một chương duy nhất chứa danh sách các phương pháp phỏng đoán và “mùi” được thu thập trong khi tạo các nghiên cứu điển hình. Kết quả là một cơ sở kiến thức mô tả cách chúng ta suy nghĩ khi viết, đọc và dọn dẹp mã.
Người đọc sẽ không hiểu được cuốn sách này
Cách phân biệt mã tốt và mã xấu
Cách viết code tốt và cách chuyển code xấu thành code tốt
Cách tạo tên hay, chức năng tốt, đồ vật tốt, lớp tốt
Cách định dạng mã để dễ đọc nhất
Cách triển khai xử lý lỗi hoàn chỉnh mà không che khuất logic mã
Cách kiểm thử đơn vị và thực hành phát triển theo hướng kiểm thử
Foreword xix
Introduction xxv
On the Cover xxix
Chapter 1: Clean Code 1
There Will Be Code 2
Bad Code 3
The Total Cost of Owning a Mess 4
Schools of Thought 12
We Are Authors 13
The Boy Scout Rule 14
Prequel and Principles 15
Conclusion 15
Bibliography 15
Chapter 2: Meaningful Names 17
Introduction 17
Use Intention-Revealing Names 18
Avoid Disinformation 19
Make Meaningful Distinctions 20
Use Pronounceable Names 21
Use Searchable Names 22
Avoid Encodings 23
Avoid Mental Mapping 25
Class Names 25
Method Names 25
Don’t Be Cute 26
Pick One Word per Concept 26
Don’t Pun 26
Use Solution Domain Names 27
Use Problem Domain Names 27
Add Meaningful Context 27
Don’t Add Gratuitous Context 29
Final Words 30
Chapter 3: Functions 31
Small! 34
Do One Thing 35
One Level of Abstraction per Function 36
Switch Statements 37
Use Descriptive Names 39
Function Arguments 40
Have No Side Effects 44
Command Query Separation 45
Prefer Exceptions to Returning Error Codes 46
Don’t Repeat Yourself 48
Structured Programming 48
How Do You Write Functions Like This? 49
Conclusion 49
SetupTeardownIncluder 50
Bibliography 52
Chapter 4: Comments 53
Comments Do Not Make Up for Bad Code 55
Explain Yourself in Code 55
Good Comments 55
Bad Comments 59
Bibliography 74
Chapter 5: Formatting 75
The Purpose of Formatting 76
Vertical Formatting 76
Horizontal Formatting 85
Team Rules 90
Uncle Bob’s Formatting Rules 90
Chapter 6: Objects and Data Structures 93
Data Abstraction 93
Data/Object Anti-Symmetry 95
The Law of Demeter 97
Data Transfer Objects 100
Conclusion 101
Bibliography 101
Chapter 7: Error Handling 103
Use Exceptions Rather Than Return Codes 104
Write Your Try-Catch-Finally Statement First 105
Use Unchecked Exceptions 106
Provide Context with Exceptions 107
Define Exception Classes in Terms of a Caller’s Needs 107
Define the Normal Flow 109
Don’t Return Null 110
Don’t Pass Null 111
Conclusion 112
Bibliography 112
Chapter 8: Boundaries 113
Using Third-Party Code 114
Exploring and Learning Boundaries 116
Learning log4j 116
Learning Tests Are Better Than Free 118
Using Code That Does Not Yet Exist 118
Clean Boundaries 120
Bibliography 120
Chapter 9: Unit Tests 121
The Three Laws of TDD 122
Keeping Tests Clean 123
Clean Tests 124
One Assert per Test 130
F.I.R.S.T. 132
Conclusion 133
Bibliography 133
Chapter 10: Classes 135
Class Organization 136
Classes Should Be Small! 136
Organizing for Change 147
Bibliography 151
Chapter 11: Systems 153
How Would You Build a City? 154
Separate Constructing a System from Using It 154
Scaling Up 157
Java Proxies 161
Pure Java AOP Frameworks 163
AspectJ Aspects 166
Test Drive the System Architecture 166
Optimize Decision Making 167
Use Standards Wisely, When They Add Demonstrable Value 168
Systems Need Domain-Specific Languages 168
Conclusion 169
Bibliography 169
Chapter 12: Emergence 171
Getting Clean via Emergent Design 171
Simple Design Rule 1: Runs All the Tests 172
Simple Design Rules 2—4: Refactoring 172
No Duplication 173
Expressive 175
Minimal Classes and Methods 176
Conclusion 176
Bibliography 176
Chapter 13: Concurrency 177
Why Concurrency? 178
Challenges 180
Concurrency Defense Principles 180
Know Your Library 182
Know Your Execution Models 183
Beware Dependencies Between Synchronized Methods 185
Keep Synchronized Sections Small 185
Writing Correct Shut-Down Code Is Hard 186
Testing Threaded Code 186
Conclusion 190
Bibliography 191
Chapter 14: Successive Refinement 193
Args Implementation 194
Args: The Rough Draft 201
String Arguments 214
Conclusion 250
Chapter 15: JUnit Internals 251
The JUnit Framework 252
Conclusion 265
Chapter 16: Refactoring SerialDate 267
First, Make It Work 268
Then Make It Right 270
Conclusion 284
Bibliography 284
Chapter 17: Smells and Heuristics 285
Comments 286
Environment 287
Functions 288
General 288
Java 307
Names 309
Tests 313
Conclusion 314
Bibliography 315
Appendix A: Concurrency II 317
Client/Server Example 317
Possible Paths of Execution 321
Knowing Your Library 326
Dependencies Between Methods Can Break Concurrent Code 329
Increasing Throughput 333
Deadlock 335
Testing Multithreaded Code 339
Tool Support for Testing Thread-Based Code 342
Conclusion 342
Tutorial: Full Code Examples 343
Appendix B: org.jfree.date.SerialDate 349
Appendix C: Cross References of Heuristics 409
Epilogue 411
Index 413