开发与重构

软件开发过程主要追求的是高效、易于维护。
高效开发体现了代码的复用率即开发效率,是为了缩短开发周期。
易于维护体现了代码的重构效率,是为了缩短维护周期。

编程语言,从C到C++,实现了从函数复用,到类复用。其实编程语言的更新换代过程,就是提高代码复用率的过程,即解决开发效率的问题。
注:还有一些其他类型的技术,都是为复用而生,如动态库,组件等。

开发语言偏向于解决开发效率的问题,而重构效率和开发效率几乎是一对成反比的变量。例如,使用C++开发时,如果只考虑提高代码复用率,那么在需求改变的时候,已有的架构很难适应新的需求,重构的任务很可能变得艰巨。C++开发相对于C开发过程,潜在地会有更多的代码重构工作。

例如,类的继承本来是一种提高复用性的手段,但是如果这种方法被滥用,会导致类的继承关系十分复杂,且十分固定,类与类之间的耦合性高。一旦产生修改需求,将会带来巨大的工作量。所以,有的特性并不是使用的越多越好,而是需要使用者根据实际情况制定使用方案。在一些需求固定的地方,如windows的界面开发框架,结构固定,运行方式百年不变,就特别适合用C++进行封装,特别是适合使用继承、多态等特性。

为什么需要重构?重构的动机是什么?

根据二八定律,软件代码中,有20%的代码占用了80%的软件运行时间。我们称20%的代码成为热点代码,80%的为冷代码。
随着需求的改变,某些功能模块/类的使用频率是会随之变化的,即有的代码变成冷代码,有的代码变成热代码。功能模块的使用频率发生改变,会导致两方面的问题:
1.开发效率降低。
新的需求如果继续使用已有的模块,而已有模块的实现方式下的代码重用率不是很高,这就导致在新需求下的开发效率会降低。
例如,为了实现相同的功能,未使用访问者设计模式编写的代码,在使用频率高了以后,相对于使用访问者设计模式下编写的代码更多,代码的重用率更低。首先在开发阶段就会导致开发效率变低,因为要写更多的代码。其次在后续的重构时,会因为相同的代码在多个地方分布,多个地方都要修改,导致修改的工作量更大。
2.运行效率降低。
有的模块的初始实现,可能并没有做很好的优化。在访问率提高后,效率问题将逐渐被放大。这时就会产生重构需求。如模块间的通信效率,数据解码效率等,需要更加高效的数据结构与算法来重构,以提高运行效率。

软件行业的任何层面都存在重构。需求变化越频繁的部分,重构越多。需求越固定的部分,重构越少。

如何理解设计模式?设计模式是为了解决什么问题?

使用设计模式是为了从软件开发的一开始,就通过人为分析现有需求,预测未来需求,对软件各个功能模块进行最优化设计,以期减少当前开发工作量和应对需求变动工作量的目的。如果一个项目急切开展起来,虽然初期开发速度快,但是可能会对后期软件的维护带来麻烦。
设计模式只是解决上述问题的方法和经验。应从代码重用即开发效率和运行效率的角度出发,理解每一种设计模式。
另外使用何种设计模式,由具体需求和预期的需求决定。使用设计模式有一定的使用成本,包括时间成本和过度设计的风险,要谨慎使用。

量化

如果能够将软件开发本身的一些指标进行量化,并且在量化后进行最优计算,最终实现自动化的软件设计模式的话,程序员就可以将更多的精力放在业务实现上,而非代码维护上。自动化的软件设计将允许人们设计规模更大、功能更复杂的软件系统,真正实现软件生产力的提高。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

撬动未来的支点

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值