书籍详情

Clean Code(评注版)

Clean Code(评注版)

作者:(美)Robert C. Martin(罗伯特.马丁) 著

出版社:电子工业出版社

出版时间:2012-01-08

ISBN:9787121155055

定价:¥79.00

购买这本书可以去
内容简介
  软件质量,不但依赖架构及项目管理,而且与代码质量紧密相关。这一点,无论是敏捷开发流派还是传统开发流派,都不得不承认。《传世经典书丛:Clean Code(评注版)》提出一种观念:代码质量与其整洁度成正比。干净的代码,既在质量上较为可靠,也为后期维护、升级奠定了良好的基础。《传世经典书丛:Clean Code(评注版)》作者给出了一系列行之有效的整洁代码操作实践。这些实践在本书中体现为一条条规则(或称“启示”),并辅以来自现实项目的正、反两方面的范例。只要遵循这些规则,就能写出干净的代码,从而有效提升代码的质量本书适合致力于改善代码质量的程序员及技术经理阅读。本书介绍的规则均来自作者多年的实践经验,涵盖从命名到重构的多个方面,虽为一“家”之言,然诚有借鉴意义。本书是CleanCode一书的评注版,力邀国内资深专家执笔,在英文原著的基础上增加了中文点评和注释,旨在融合二者之长,既保留经典的原创文字与味道,又以先行者的学研心得与实践感悟,对读者的阅读和学习加以点拨,指明捷径。
作者简介
  作者简介Robert C. Martin软件工程领域的大师级人物,设计模式和敏捷开发运动的主要倡导者之一,曾经担任C++ Report杂志主编多年。他的Agile Software Development:Principles, Patterns, and Practices一书曾荣获Jolt大奖。评注者简介韩磊技术管理者和作译者,互联网专家。2001年创办CoDelphi.com中文开发在线网站;2003年加入CSDN,历任网络总监、副总经理、CSDN网站和《程序员》杂志总编辑等职;2010年加入21世纪传媒,现任21世纪新媒体副总经理、CTO。拥有美国Borland公司“Delphi产品专家”及“微软最有价值专家”称号。译有《C#编程风格》(Elements of C# Style)、《梦断代码》(Dreaming in Code)、《代码整洁之道》(Clean Code),合著有《网络媒体教程》,合译有《Beginning C#Objects:对象到代码》。
目录
目 录Chapter 1: CleanCode(新增评注47条)  1There Will BeCode       2BadCode       3The Total Cost ofOwning a Mess  5The Grand Redesign inthe Sky     6Attitude   6The PrimalConundrum  7The Art of CleanCode?  8What Is CleanCode?     9Schools ofThought      15We AreAuthors      17The Boy ScoutRule       18Prequel andPrinciples   18Conclusion    18Bibliography   19Chapter 2: MeaningfulNames(新增评注19条)    21Introduction    21Use Intention-RevealingNames    22AvoidDisinformation    24Make MeaningfulDistinctions     25Use PronounceableNames     26Use SearchableNames   27AvoidEncodings    28HungarianNotation      28MemberPrefixes    29Interfaces andImplementations     29Avoid MentalMapping  30ClassNames   30MethodNames      30Don’t Be Cute31Pick One Word perConcept  32Don’tPun      32Use Solution DomainNames 33Use Problem DomainNames 33Add MeaningfulContext      33Don’t Add GratuitousContext      35FinalWords    36Chapter 3:Functions(新增评注25条)    39Small!     42Blocks andIndenting     43Do One Thing44Sections withinFunctions      45One Level ofAbstraction per Function  45Reading Code from Topto Bottom:The StepdownRule      46SwitchStatements  46Use DescriptiveNames  48FunctionArguments      49Common MonadicForms      50FlagArguments      50DyadicFunctions   51Triads     52ArgumentObjects  52ArgumentLists      52Verbs andKeywords      53Have No SideEffects    53OutputArguments  54Command QuerySeparation  55Prefer Exceptions toReturning Error Codes 56Extract Try/CatchBlocks      57Error Handling Is OneThing 57The Error.javaDependency Magnet     57Don’t RepeatYourself    58StructuredProgramming      59How Do You WriteFunctions Like This?    59Conclusion    60SetupTeardownIncluder  60Bibliography   62Chapter 4:Comments(新增评注18条)   65Comments Do Not Make Upfor Bad Code   67Explain Yourself inCode      68GoodComments    68LegalComments    68InformativeComments  69Explanation ofIntent     69Clarification   70Warning ofConsequences     71TODOComments   71Amplification72Javadocs in Public APIs72BadComments      72Mumbling     73RedundantComments    73MisleadingComments    76MandatedComments     76JournalComments  77NoiseComments    78ScaryNoise    80Don’t Use a CommentWhen You Can Use a Function oraVariable      80PositionMarkers    80Closing BraceComments      81Attributions andBylines 82Commented-OutCode   82HTMLComments   83NonlocalInformation    83Too MuchInformation   84InobviousConnection    84FunctionHeaders   84Javadocs in NonpublicCode  85Example  85Bibliography   88Chapter 5:Formatting(新增评注13条)  89The Purpose ofFormatting    90Vertical Formatting90The NewspaperMetaphor      91Vertical OpennessBetween Concepts    92VerticalDensity      93VerticalDistance    94VerticalOrdering    99HorizontalFormatting   99Horizontal Openness andDensity  100HorizontalAlignment    101Indentation    103DummyScopes      104TeamRules     105Uncle Bob’s FormattingRules      106Chapter 6: Objects andData Structures(新增评注12条)      109DataAbstraction     110Data/ObjectAnti-Symmetry  111The Law ofDemeter      114TrainWrecks  115Hybrids   116HidingStructure    116Data TransferObjects    117Active Record118Conclusion    118Bibliography   119Chapter 7: ErrorHandling(新增评注7条)    121Use Exceptions RatherThan Return Codes   122Write YourTry-Catch-Finally StatementFirst      123Use UncheckedExceptions    125Provide Context withExceptions  126Define ExceptionClasses in Terms of a Caller’sNeeds      126Define the NormalFlow      128Don’t ReturnNull  129Don’t PassNull      130Conclusion    131Bibliography   131Chapter 8:Boundaries(新增评注6条)    133Using Third-Party Code134Exploring and LearningBoundaries     136Learninglog4j      137Learning Tests AreBetter Than Free    138Using Code That DoesNot Yet Exist    139CleanBoundaries   140Bibliography   141Chapter 9: UnitTests(新增评注13条)    143The Three Laws of TDD144Keeping TestsClean      145Tests Enable the-ilities  146CleanTests     147Domain-Specific TestingLanguage      150A DualStandard     150One Assert per Test153Single Concept perTest  154F.I.R.S.T.      155Conclusion    156Bibliography   156Chapter 10:Classes(新增评注12条)     157ClassOrganization  158Encapsulation158Classes Should BeSmall!      158The SingleResponsibility Principle     161Cohesion 162Maintaining CohesionResults in Many Small Classes  163Organizing forChange   169Isolating fromChange   172Bibliography   174Chapter 11:Systems(新增评注10条)    175How Would You Build aCity?      176Separate Constructing aSystem from Using It    176Separation of Main178Factories178DependencyInjection    179ScalingUp     180Cross-CuttingConcerns  183JavaProxies   184Pure Java AOPFrameworks  186AspectJAspects      189Test Drive the SystemArchitecture      190Optimize DecisionMaking    191Use Standards Wisely,When They Add DemonstrableValue      191Systems NeedDomain-Specific Languages   191Conclusion    192Bibliography   192Chapter 12:Emergence(新增评注5条)  195Getting Clean viaEmergent Design     195Simple Design Rule 1:Runs All the Tests    196Simple Design Rules2–4: Refactoring  196NoDuplication     197Expressive     199Minimal Classes andMethods      200Conclusion    201Bibliography   201Chapter 13:Concurrency(新增评注15条)    203Why Concurrency?204Myths andMisconceptions     205Challenges     206Concurrency DefensePrinciples    207Single ResponsibilityPrinciple     207Corollary: Limit theScope of Data      207Corollary: Use Copiesof Data      208Corollary: ThreadsShould Be as Independent as Possible   208Know YourLibrary      209Thread-Safe Collections209Know Your ExecutionModels      210Producer-Consumer      210Readers-Writers     211DiningPhilosophers     211Beware DependenciesBetween SynchronizedMethods      212Keep SynchronizedSections Small      212Writing CorrectShut-Down Code Is Hard   212Testing ThreadedCode   213Treat Spurious Failuresas Candidate Threading Issues 214Get Your NonthreadedCode Working First  214Make Your Threaded CodePluggable   214Make Your Threaded CodeTunable      215Run with More ThreadsThan Processors     215Run on DifferentPlatforms   215Instrument Your Code toTry and Force Failures  215Hand-Coded   216Automated     217Conclusion    218Bibliography   219Chapter 14: SuccessiveRefinement(新增评注18条)    221ArgsImplementation     223How Did I DoThis?      228Args: The RoughDraft  229So IStopped   240On Incrementalism241StringArguments   243Conclusion    280关于第15章、第16章和第17章     281Chapter 15: JUnitInternals    283The JUnitFramework    284Conclusion    297Chapter 16: RefactoringSerialDate     299First, Make ItWork      300Then Make ItRight      302Conclusion    316Bibliography   316Chapter 17: Smells andHeuristics 317Comments     318C1: InappropriateInformation     318C2: ObsoleteComment  318C3: RedundantComment      318C4: Poorly WrittenComment      319C5: Commented-OutCode    319Environment   319E1: Build Requires MoreThan One Step     319E2: Tests Require MoreThan One Step 319Functions      320F1: Too ManyArguments      320F2: OutputArguments   320F3: FlagArguments      320F4: DeadFunction  320General   320G1: Multiple Languagesin One Source File 320G2: Obvious Behavior IsUnimplemented    320G3: Incorrect Behaviorat the Boundaries    321G4: Overridden Safeties321G5:Duplication     321G6: Code at Wrong Levelof Abstraction     322G7: Base ClassesDepending on TheirDerivatives      323G8: Too MuchInformation    324G9: DeadCode      324G10: VerticalSeparation      324G11: Inconsistency324G12:Clutter   325G13: ArtificialCoupling      325G14: Feature Envy325G15: SelectorArguments      326G16: ObscuredIntent     327G17: MisplacedResponsibility     328G18: InappropriateStatic      328G19: Use ExplanatoryVariables    329G20: Function NamesShould Say What TheyDo       329G21: Understand theAlgorithm    330G22: Make LogicalDependencies Physical   330G23: PreferPolymorphism to If/Else or Switch/Case 331G24: Follow StandardConventions     332G25: Replace MagicNumbers with Named Constants  332G26: BePrecise     333G27: Structure overConvention    333G28: EncapsulateConditionals     334G29: Avoid NegativeConditionals 334G30: Functions ShouldDo One Thing  334G31: Hidden TemporalCouplings 335G32: Don’t BeArbitrary      336G33: EncapsulateBoundaryConditions      336G34: Functions ShouldDescend Only One Level of Abstraction 337G35: Keep ConfigurableData at High Levels     338G36: Avoid TransitiveNavigation 339Java 339J1: Avoid Long ImportLists by Using Wildcards 339J2: Don’t InheritConstants    340J3: Constants versusEnums   341Names     342N1: Choose DescriptiveNames     342N2: Choose Names at theAppropriate Level of Abstraction 343N3: Use StandardNomenclature Where Possible  344N4: UnambiguousNames      344N5: Use Long Names forLong Scopes  345N6: AvoidEncodings     345N7: Names ShouldDescribe Side-Effects    345Tests      346T1: InsufficientTests     346T2: Use a CoverageTool      346T3: Don’t Skip TrivialTests  346T4: An Ignored Test Isa Question about anAmbiguity      346T5: Test BoundaryConditions      346T6: Exhaustively TestNear Bugs   346T7: Patterns of FailureAre Revealing   347T8: Test CoveragePatterns Can BeRevealing      347T9: Tests Should BeFast      347Conclusion    347Bibliography   347Appendix A: ConcurrencyII  349Client/ServerExample   349TheServer      349AddingThreading  351ServerObservations      351Conclusion    353Possible Paths ofExecution   353Number ofPaths    354DiggingDeeper      355Conclusion    358Knowing YourLibrary   359ExecutorFramework     359NonblockingSolutions   359Nonthread-SafeClasses  361Dependencies BetweenMethods Can Break ConcurrentCode     362Tolerate the Failure363Client-BasedLocking     363Server-Based Locking  365IncreasingThroughput   366Single-ThreadCalculation of Throughput    367Multithread Calculationof Throughput 367Deadlock 368MutualExclusion   369Lock &Wait   369NoPreemption      369CircularWait  370Breaking MutualExclusion   370Breaking Lock &Wait   370BreakingPreemption     371Breaking CircularWait  371Testing MultithreadedCode   372Tool Support forTesting Thread-BasedCode      374Conclusion    375Tutorial: Full CodeExamples      375Client/ServerNonthreaded    375Client/Server UsingThreads  379Appendix B:org.jfree.date.SerialDate  381Appendix C: CrossReferences of Heuristics 441Epilogue 445
猜您喜欢