第2章 重构

重构:是一种对软件内部结构的改善,目的是在不改变软件的可见行为的情况下,使其更易理解,修改成本更低。
重构过程包括去除重复、简化复杂逻辑和澄清模糊的代码。
重构的动机:使新代码 的增加更加容易;改善既有代码的设计;对代码理解更透彻;提高编程趣味性
可读性好的代码
保持清晰
循序渐进
设计欠账
演变出新的架构
复合重构与测试驱动的重构
复合重构:由多个低层次重构组成的高层次重构。
复合重构的优点:描述了重构顺序的完整计划;能够提示不明显的设计方向;促进对实现模式的深入思考。
重构工具:自动化重构
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,让我们逐步进行重构和添加新功能。 首先,我们需要增加新的影片分类。我们可以在Movie类中添加一个新的字段来表示影片的分类。代码如下: ```python class Movie: def __init__(self, title, price_code, category): self.title = title self.price_code = price_code self.category = category ``` 接下来,我们需要修改租赁和积分标准。我们可以在Rental类中添加一个新的方法来计算租赁费用和积分。代码如下: ```python class Rental: def __init__(self, movie, days_rented): self.movie = movie self.days_rented = days_rented def get_charge(self): """ 计算租赁费用 """ if self.movie.price_code == REGULAR: amount = 2 if self.days_rented > 2: amount += (self.days_rented - 2) * 1.5 elif self.movie.price_code == NEW_RELEASE: amount = self.days_rented * 3 elif self.movie.price_code == CHILDRENS: amount = 1.5 if self.days_rented > 3: amount += (self.days_rented - 3) * 1.5 else: # 其他分类按照普通影片计算租赁费用 amount = 2 if self.days_rented > 2: amount += (self.days_rented - 2) * 1.5 return amount def get_frequent_renter_points(self): """ 计算租赁积分 """ # 新发行的电影租赁超过一天,就可以获得额外的积分奖励 if self.movie.price_code == NEW_RELEASE and self.days_rented > 1: return 2 else: return 1 ``` 最后,我们需要以HTML格式输出订单。我们可以在Customer类中添加一个新的方法来生成HTML格式的订单。代码如下: ```python class Customer: def __init__(self, name): self.name = name self.rentals = [] def add_rental(self, rental): self.rentals.append(rental) def statement(self): total_amount = 0 frequent_renter_points = 0 result = f"Rental Record for {self.name}\n" for rental in self.rentals: this_amount = rental.get_charge() frequent_renter_points += rental.get_frequent_renter_points() # 显示此次租赁的电影信息以及租赁费用 result += f"\t{rental.movie.title}\t{this_amount}\n" total_amount += this_amount # 添加页脚信息 result += f"Amount owed is {total_amount}\n" result += f"You earned {frequent_renter_points} frequent renter points\n" return result def statement_html(self): total_amount = 0 frequent_renter_points = 0 result = f"<h1>Rental Record for {self.name}</h1>\n<table>\n<tr><th>Title</th><th>Days rented</th><th>Amount</th></tr>" for rental in self.rentals: this_amount = rental.get_charge() frequent_renter_points += rental.get_frequent_renter_points() # 显示此次租赁的电影信息以及租赁费用 result += f"<tr><td>{rental.movie.title}</td><td>{rental.days_rented}</td><td>{this_amount}</td></tr>" total_amount += this_amount # 添加页脚信息 result += f"</table>\n<p>Amount owed is {total_amount}</p>\n<p>You earned {frequent_renter_points} frequent renter points</p>" return result ``` 现在我们已经完成了对影片租赁程序的重构和功能添加。可以看到,我们通过增加新的影片分类、修改租赁和积分标准以及以HTML格式输出订单,使得程序更加灵活和易于维护。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值