首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

《复建》C#版实现(三)Statement的整体重构

2012-08-10 
《重构》C#版实现(三)Statement的整体重构上一篇使用了Extract Method技巧,从Statement方法中分离出了Amount

《重构》C#版实现(三)Statement的整体重构

上一篇使用了Extract Method技巧,从Statement方法中分离出了AmountFor方法,从而略微提高了Statement方法的可读性,下面我们继续跟着《重构》的脚步来进行剩余的重构。当然在继续之前,我还是会提醒你,每一步重构之后,记得运行单元测试,它是重构的基石。

一、重命名AmountFor的局部变量
首先看看我们先前抽取出来的AmountFor方法:

public string Statement(){string result = "Rental Record for " + Name + "\n";foreach (Rental rental in Rentals){                // show figures for this rentalresult += "\t" + rental.Movie.Title + "\t" + rental.Charge.ToString() + "\n";}// add footer linesresult += "Amount owed is " + TotalCharge.ToString() + "\n";result += "You earned " + TotalRenterPoints.ToString() + " frequent renter points";return result;}
6.运行单元测试,如果不通过则检查、调试、修改,直到通过为止
7.重构完成

至此,我们重新审视一下Statement方法,比起最初的版本而言,哪一个更容易看出它所包含的逻辑?最起码我扫一眼后面这个版本就知道它的工作如下:
总的来说,它生成了一份报告文本;这个报告用用户名生成了一报告头;为每一个Rental生成了一份标题+花费的记录;报告的Footer包含两样内容,分别是该客户的总花费,以及他能得到的总积分是多少。

至于很多人会质疑,抽取的TotalCharge和TotalRenterPoints会带来两次额外的Rentals遍历,以至于存在效率降低的的问题。还是参阅《重构》书中的内容吧。








热点排行