Prefactoring (Paperback)
內容描述
Description:
More often than not, developers will stop a large project in the middle of
the build stage to rethink and recode the software design so it's cleaner and
more efficient. Known as "refactoring," this process eats up valuable time and
money. To help offset refactoring, this book presents a new process called
"prefactoring," the premise of which states that you're better off considering
the best possible design patterns before you even begin your project.
Prefactoring, in essence, is the art of applying the insights gleaned
from previous experience (whether yours or someone else's) when developing
software to new projects. Doing so will likely save you from making costly
design changes midstream--and maybe even save your job!
This practical, thought-provoking guide details prefactoring guidelines
in design, code, and testing, each derived from the lessons of many developers
over many years. With these guidelines, you're far more likely to create more
readable and maintainable code before you reach the second-guessing stage.
To help communicate the many facets of this process,
Prefactoring follows the example of a fictitious client, Sam, as he
seeks to create a software system from beginning to implementation. Among the
topics covered:
General development issues
Implementation classes
Object-oriented design
Creating reports via separation of concerns
Associations and states
Creating and testing interfaces
If you understand object-oriented design, and you want to save time and
money by considering more efficient designs before you begin your
project, Prefactoring will show you the way. It won't guarantee that
you'll never need to refactor your design or code again, but you're sure to
cut down on the amount of refactoring you do.
Table of
Contents:
Preface
- Introduction to Prefactoring
What Is Prefactoring?
The Three Extremes The Guidelines Explored
The Context for This Book - 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 - 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 - Getting the Big Picture
The Rest of the Story Process
The Initial Design
Global Planning, Local Designing Testing
Functionality Testing Quality
Security Got Class?
Categories and Classes Declaration Versus
Execution Appropriate Inheritance
Communicate with Text More Than OneA 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 FunctionsGetting There
Where We Are Separating Concerns
Migrating to the New System- 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 Associations and States
Sam's New Requirement Who's
in Charge? The State of an ObjectInterfaces and Adaptation
The Catalog Search Use Case
Designing the Interface Interface
Development Interface Testing
Interface Splitting Something
Working- Zip Codes and Interfaces
Adaptation Pass
the Buck Unwritten Code
Indirection Logging
Paradigm Mismatch - More Reports
Fancy Reports Change Happens
Exports - Invoices, Credit Cards, and
Discounts The Next Step
The Language of the Client Security
and Privacy - Sam Is Expanding
The Second Store A New Development
The Third Store
Goodbye Sam Generality - A Printserver Example
Introduction The System
The Message Testing
Logging Still More
Separation Epilogue Antispam Example
The Context Spam Checking
The ReceivingMailServer
ReceivedMailExaminer The Full FlowEpilogue
a. Guidelines and Principles
b. Source Code
index