Replace Parameter with Explicit Methods

From CSSEMediaWiki
Revision as of 13:01, 23 September 2008 by Geoffrey Clark (Talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Motivation

Refactoring Martin Fowler 1999 states that: "If a method can get a value that is passed in as a parameter by another means, it should."

Example

An object invokes a method, then passes the result as a parameter for a method. The receiver can also invoke this method. So the best idea is to remove the parameter and let the receiver invoke the method.

int basePrice = quantity * itemPrice;
discountLevel = getDiscountLevel();
double finalPrice = discountedPrice(basePrice, discountLevel);

Above we have some code, but lets remove the discountLevel parameter from discountedPrice(basePrice, discountLevel). Now we have:

int basePrice = quantity * itemPrice;
double finalPrice = discountedPrice(basePrice);

The discountedPrice(basePrice) method now looks like:

discountedPrice(basePrice)
{
    int discountLevel = getDiscountLevel();
    //does calculation type stuff here
    
    return discountedPrice;
}
Personal tools