编写可拥抱变化的代码,实现类的单一职责设计
在软件开发中,代码的可维护性和可扩展性至关重要。随着项目的发展,需求不断变化,我们需要编写能够轻松应对这些变化的代码。本文将介绍一些编写可拥抱变化代码的技巧,以及如何在代码中贯彻单一职责原则。
依赖行为而非数据
在编程中,行为通过方法捕获,并通过发送消息来调用。当创建具有单一职责的类时,每个小的行为都只存在于一个地方,这就是“不要重复自己”(DRY)原则。DRY 代码更易于容忍变化,因为任何行为的改变只需在一个地方修改代码。
除了行为,对象通常还包含数据。数据对象存储在实例变量中,可以是简单的字符串或复杂的哈希。访问数据有两种方式:直接引用实例变量或使用访问器方法包装实例变量。
隐藏实例变量
始终使用访问器方法包装实例变量,而不是直接引用变量。例如,以下代码直接引用实例变量,不利于代码的维护:
class Gear
def initialize(chainring, cog)
@chainring = chainring
@cog = cog
end
def ratio
@chainring / @cog.to_f # <-- road to ruin
end
end
使用 attr_reader
可以轻松创建封装方法,将实例变量隐藏起来:
class Gear
attr_reader :chainr