|
Prefactoring
Prefactoring approaches software development of new systems
using lessons learned from many developers over the years.
It is a compendium of ideas gained from retrospectives on
what went right and what went wrong in development. Some of
these ideas came from experience in refactoring.
Refactoring is improving the design of
existing code to make
it simpler and easier to maintain.
This practical, thought-provoking guide details prefactoring
guidelines in design, code, and testing. These guidelines
can help you create more readable and maintainable code in
your next project.
To help communicate the many facets of this approach,
Prefactoring follows the development of a software system
for a fictitious client, named Sam, from vision through
implementation. Some of the guidelines you'll encounter
along the way include:
When You're Abstract, Be Abstract All the Way
Splitters Can Be Lumped Easier Than Lumpers Can Be Split
Do a Little Job Well and You May Be Called Upon Often
Plan Globally, Develop Locally
Communicate with Your Code
The Easiest Code to Debug Is That Which is Not Written
Use the Client's Language
Don't Let the Cold Air In
Never Be Silent
Don't Speed Until You Know Where You Are Going
Preface
1. Introduction to Prefactoring
What Is Prefactoring?
The Three Extremes
The Guidelines Explored
The Context for This Book
2. The System in So Many Words
Meet Sam
Reinvention Avoidance
What's in a Name?
Splitters Versus Lumpers
Clumping
Abstracting
Prototypes Are Worth a Thousand Words
3. General Development Issues
Start with the Big Picture
Interface Contracts
Validation
Code Communicates
Consistency Is Simplicity
A Prefactoring Attitude
Don't Repeat Yourself
Documentation of Assumptions and Decisions
Dealing with Deviations and Errors
Speeding
The Spreadsheet Conundrum
Tools Are Tools-Use Them Wisely
4. Getting the Big Picture
The Rest of the Story
Process
The Initial Design
Global Planning, Local Designing
Testing Functionality
Testing Quality
Security
5. Got Class?
Categories and Classes
Declaration Versus Execution
Appropriate Inheritance
Communicate with Text
More Than One
6. A Few Words on Classes
Honor the Class Maxims
Three Laws of Objects
Need Determines Class
Polymorphism
One Little Job
Policy Versus Implementation
Extreme Naming
Overloading Functions
7. Getting There
Where We Are
Separating Concerns
Migrating to the New System
8. The First Release
The Proof Is in the Pudding
Retrospective Time
The System as It Stands Now
Operations Interface
Abstract Data Types
Configuration
Testing
Dealing with Deviations and Errors
A Little Prefactoring
The First Released Iteration
Sometimes Practice Does Not Match Theory
The Rest of the Classes
9. Associations and States
Sam's New Requirement
Who's in Charge?
The State of an Object
10. Interfaces and Adaptation
The Catalog Search Use Case
Designing the Interface
Interface Development
Interface Testing
Interface Splitting
Something Working
11. Zip Codes and Interfaces
Adaptation
Pass the Buck
Unwritten Code
Indirection
Logging
Paradigm Mismatch
12. More Reports
Fancy Reports
Change Happens
Exports
13. Invoices, Credit Cards, and Discounts
The Next Step
The Language of the Client
Security and Privacy
14. Sam Is Expanding
The Second Store
A New Development
The Third Store
Goodbye Sam
Generality
15. A Printserver Example
Introduction
The System
The Message
Testing
Logging
Still More Separation
Epilogue
16. Antispam Example
The Context
Spam Checking
The ReceivingMailServer
ReceivedMailExaminer
The Full Flow
17. Epilogue
a. Guidelines and Principles
b. Source Code
index
|