Temporary fieldAn attribute of an object is only set in certain circumstances; but an object should need all of its attributes Speculative Generality“Oh I think we need the ability to do this kind of thing someday” Data ClassThese are classes that have ﬁelds, getting and setting methods for the ﬁelds, and nothing else; they are data holders, but objects should be about data AND behavior
Mitigation of serialization:- Don’t extend java.io.serializable- ImplementreadObject and writeObject as final methods that throw IOException- If serialize you must: use transient or use java.io.Externalizeable plus Encryption
Every Programmer Should Know Code Reviews Roger Xia July 2012
Programming & Code review• Programming is – Taking an algorithm – Choosing a language – Using that language to implement algorithm and solve problems• Code review is –?
Why?• Increase Quality & Reduce Defects• Improve readability• Share knowledge in team• Know your workmate better!• Two Wrongs Can Make a Right• NOT personal attack!• NOT architect reviews everything
Preparation• Code Conventions• Findbugs• Tested• Test case
Take care of• naming convention spelling mistakes• business logic• refactoring• performance• security (attack, thread safe)
Refactoring• Refactoring modifies software to improve its readability, maintainability, and extensibility without changing what it actually does.• Martin Fowler uses “code smells” to identify when to refactor.• Boss: "Refactoring is an overhead activity - Im paid to write new, revenue generating features."
Code smells• Bad names• Duplicate code• Long method• Large class• Long parameter list• Temporary field• Speculative Generality• Data Class• Don’t flood log
Meaningful Names• Class names – Should be nouns or noun phrases. – Examples: Car, Account, DataRetrievalService, AddressParser• Method names – Should be verb or verbPhrases – Examples: parseData, deletePage, save – Methods that return boolean values should sound like question. – Examples: isAuthenticated, hasNoErrors, isEmpty• Interface and Implementation – ICache LRUCache – IExport ExportService• Constants – MAX_VALUE – SEP_COMMA, SEP_SEMICOLON
The Art of Readable code• The book!• I want to point out: – Use blank to separate logic block.
Comments for complexprocess, algorithm, reasons
Aiming for simplicity• Do one thing in a function (simple responsibility)• Have no side effects.• Prefer exceptions to return codes.• Format your code.
DRY -- Don’t repeat yourself• Duplicated code should be avoided.• Object Orientation, Abstract!• Design pattern!
OO Principles• Simple responsibility principle: Class should have one and only one reason to change.• Encapsulation: Modules should not know internal details of objects it manipulates.• Polymorphism -- Liskov’s substitution principle: A subclass can be used as an argument where a base class is expected.• Open-closed principle: Class should be open for extention, but closed for modification.
Pay Attention to Performance• JAVA: JVM usage – Don’t create object in loop – Use ArrayList, HashMap etc as opposed to Vector, Hashtable etc (synchronized) where possible. Even better is to use just arrays where possible. – Set initial capacity of a collection (e.g. ArrayList, HashMap) and StringBuffer/StringBuilder appropriately. – Concurrent Collection, Lock – Lazy load or multi-threading where applicable. – Cache (LRUCache, Distributed Cache)