目前正在阅读一本精彩的书《Ruby中面向对象的实用设计》,并通过一个简单的kata来真正实践它所讨论的一些原则。
我有一种方法可以做到以下几点:
def release_bike
capacity_empty_error if empty?
bike
end
这从我的DockingStation类中"释放了一个bike对象"(我知道bike对象应该是一个参数,但目前我只希望该方法返回bike对象,而不是删除它)。
#capacity_pempty_error执行以下操作:
def capacity_empty_error
raise "Docking Station is empty."
end
还有#空?看起来像:
def empty?
bike == nil
end
其中bike是我的实例变量@bike的包装方法。DockingStation类的当前容量因此为1,因为当#bike设置为某个值时,代码假设它已满(我计划稍后添加适当的容量)。
所以希望这能解释我的代码,请提出问题并提出改进建议,如果没有,我想问的问题是:
我觉得#release_bike:中的保护条款行
capacity_empty_error if empty?
是该方法的一个责任,并且在下一行上返回CCD_ 2是第二个责任。这显然违反了SRP,但我不知道如何使用保护条款,除非将其作为第二责任添加到现有方法中。
能做到吗?其他人是如何做到的?
将功能转移到其他类/模块怎么样?
module BikeChecker
def capacity_empty_error
raise "Docking Station is empty."
end
def release_bike
capacity_empty_error if empty?
end
def empty?
false
end
end
class YourClass
include BikeChecker
def release_bike
super
bike
end
def empty?
bike == nil
end
end
你可以放弃#空?方法,我把它留在这里是为了更好地理解