Replace Parameter with Method

From CSSEMediaWiki
(Difference between revisions)
Jump to: navigation, search
(New page: == 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 ...)
 
 
(One intermediate revision by one user not shown)
Line 2: Line 2:
  
 
''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."
 
''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."
 +
 +
In some cases, this could lead to a violation of [[Tell, don't ask]].  This would occur where these method calls are occurring between different classes rather than within one class.
  
 
== Example ==
 
== Example ==
Line 25: Line 27:
 
     return discountedPrice;
 
     return discountedPrice;
 
  }
 
  }
 +
 +
== See Also ==
 +
* [[Tell, don't ask]]

Latest revision as of 21:34, 14 October 2009

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."

In some cases, this could lead to a violation of Tell, don't ask. This would occur where these method calls are occurring between different classes rather than within one class.

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;
}

See Also

Personal tools