Refactoring Day 5 : Pull Up Field
Today we look at a refactoring that is similar to the Pull Up method. Instead of a method, it is obviously done with a field instead!
1: public abstract class Account
<pre><span class="lnum"> 2:</span> {</pre>
<pre><span class="lnum"> 3:</span> }</pre>
<pre><span class="lnum"> 4:</span>  </pre>
<pre><span class="lnum"> 5:</span> <span class="kwrd">public</span> <span class="kwrd">class</span> CheckingAccount : Account</pre>
<pre><span class="lnum"> 6:</span> {</pre>
<pre><span class="lnum"> 7:</span> <span class="kwrd">private</span> <span class="kwrd">decimal</span> _minimumCheckingBalance = 5m;</pre>
<pre><span class="lnum"> 8:</span> }</pre>
<pre><span class="lnum"> 9:</span>  </pre>
<pre><span class="lnum"> 10:</span> <span class="kwrd">public</span> <span class="kwrd">class</span> SavingsAccount : Account</pre>
<pre><span class="lnum"> 11:</span> {</pre>
<pre><span class="lnum"> 12:</span> <span class="kwrd">private</span> <span class="kwrd">decimal</span> _minimumSavingsBalance = 5m;</pre>
<pre><span class="lnum"> 13:</span> }</pre></p>
In this example, we have a constant value that is duplicated between two derived classes. To promote reuse we can pull up the field into the base class and rename it for brevity.
1: public abstract class Account
<pre><span class="lnum"> 2:</span> {</pre>
<pre><span class="lnum"> 3:</span> <span class="kwrd">protected</span> <span class="kwrd">decimal</span> _minimumBalance = 5m;</pre>
<pre><span class="lnum"> 4:</span> }</pre>
<pre><span class="lnum"> 5:</span>  </pre>
<pre><span class="lnum"> 6:</span> <span class="kwrd">public</span> <span class="kwrd">class</span> CheckingAccount : Account</pre>
<pre><span class="lnum"> 7:</span> {</pre>
<pre><span class="lnum"> 8:</span> }</pre>
<pre><span class="lnum"> 9:</span>  </pre>
<pre><span class="lnum"> 10:</span> <span class="kwrd">public</span> <span class="kwrd">class</span> SavingsAccount : Account</pre>
<pre><span class="lnum"> 11:</span> {</pre>
<pre><span class="lnum"> 12:</span> }</pre></p>
This is part of the 31 Days of Refactoring series. For a full list of Refactorings please see the original introductory post.
