圣诞大减价开始了!

引进国外方法

问题

实用程序类不包含所需的方法,也不能将方法添加到类中。

解决方案

将方法添加到客户端类,并将实用工具类的对象作为参数传递给它。

之前
类报告{//…void sendReport(){日期nextDay =新的日期(previousEnd.getYear(), previousEnd.getMonth(), previousEnd.getDate() + 1);/ /……}}
类报告{//…void sendReport(){日期newStart = nextDay(previousEnd);/ /……}私有静态日期nextDay(日期arg){返回新的日期(arg. getyear (), arg. getmonth (), arg. getdate () + 1);}}
之前
类报告{//…void SendReport() {DateTime nextDay = previousEnd.AddDays(1);/ /……}}
类报告{//…void SendReport() {DateTime nextDay = nextDay (previousEnd);/ /……}私有静态DateTime NextDay(DateTime日期){返回日期。adddays (1);}}
之前
类报告{//…公共函数sendReport() {$previousDate =克隆$this->previousDate;$paymentDate = $previousDate->修改(“+7天”);/ /……}}
类报告{//…公共函数sendReport() {$paymentDate = self::nextWeek($this->previousDate);/ /……} /** *外部方法。应该在日期。*/私有静态函数nextWeek(DateTime $arg) {$previousDate =克隆$arg;return $previousDate->modify(+7 days);}}
之前
班级报告:#…def sendReport(self): nextDay = Date(self. previousend . getyear (), self. previousend . getmonth (), self. previousend . getdate() + 1) #…
班级报告:#…def sendReport(self): newStart = self. _nextday (self. previousend) #…def _nextDay(self, arg):返回Date(arg. getyear (), arg. getmonth (), arg. getdate () + 1)
之前
类报告{//…sendReport(): void {let nextDay: Date = new Date(previousEnd.getYear(), previousEnd.getMonth(), previousEnd.getDate() + 1);/ /……}}
类报告{//…sendReport() {let newStart: Date = nextDay(previousEnd);/ /……}私有静态nextDay(arg: Date):日期{返回新的日期(argg . getfullyear (), argg . getmonth (), argg . getdate () + 1);}}

为什么重构

您拥有使用特定类的数据和方法的代码。您会意识到,在类中的新方法中,代码看起来和工作起来都要好得多。但是您不能将方法添加到类中,因为,例如,类位于第三方库中。

当您想要移动到该方法的代码在程序的不同位置重复多次时,这种重构会带来很大的回报。

由于您将实用工具类的对象传递给新方法的参数,因此您可以访问它的所有字段。在方法内部,您几乎可以做任何想做的事情,就好像该方法是实用程序类的一部分一样。

好处

  • 删除代码重复。如果代码在多个地方重复,可以用方法调用替换这些代码片段。这比复制好,即使考虑到国外的方法位于一个次优的地方。

缺点

  • 在客户端类中使用实用程序类的方法的原因对于在您之后维护代码的人来说并不总是很清楚。如果该方法可以在其他类中使用,则为该实用程序类创建一个包装器并将该方法放置在其中会有好处。当有几个这样的实用程序方法时,这也是有益的。介绍本地扩展能帮上忙。

如何重构

  1. 在客户端类中创建一个新方法。

  2. 在此方法中,创建一个参数,实用工具类的对象将传递给该参数。如果该对象可以从客户端类中获得,则不必创建这样的参数。

  3. 提取此方法的相关代码片段,并用方法调用替换它们。

  4. 一定要离开外国法在注释中标记该方法,并建议将该方法放在实用程序类中(如果以后可能的话)。这将使将来维护软件的人更容易理解为什么这个方法位于这个特定的类中。

Baidu
map