Replace Parameter with Explicit Methods

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 ...)
 
 
(2 intermediate revisions by 2 users not shown)
Line 1: Line 1:
== Motivation ==
+
This is used when you have a method which switches it's functionality based on a passed in parameter.
  
''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."
+
==Steps==
 +
* Create a new method for each case
 +
* Replace all calls to the old method with a call to the relevant new one
 +
* Delete the old method
  
== Example ==
+
==References==
 
+
* [http://sourcemaking.com/refactoring/replace-parameter-with-explicit-methods]
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;
+
}
+

Latest revision as of 12:29, 26 September 2009

This is used when you have a method which switches it's functionality based on a passed in parameter.

Steps

  • Create a new method for each case
  • Replace all calls to the old method with a call to the relevant new one
  • Delete the old method

References

Personal tools