【发布时间】:2013-09-15 17:48:14
【问题描述】:
我有以下课程:
CachedObject
CachedObjectSource
CachedObjectDbSource < CachedObjectSource
CachedObjectDalliSource < CachedObjectSource
CachedObject 是从第三方 API 提取并存储在本地的非数据库对象。 CachedObject 将存储在数据库和 Dalli (memcache) 中,实时代码将 ping Dalli 源以获取对象的副本,如果对象不存在,Dalli 源将搜索数据库源并更新其缓存.所以它是一个嵌套调用,它要求 CachedObjectSource 的每个子类实现相同的一组方法。 IE,一个接口。
有没有办法编写 CachedObjectSource 类,使其子类必须实现接口?我是不是走错路了?
【问题讨论】:
-
我认为 Ruby 的哲学是反对在类定义中对接口进行静态检查。如果您想确保
CachedObjectSource的子级实现相同的方法,也许Ruby 的方式是编写一个包含预期方法列表的单元测试,并验证每种类型的源responds_to?的每个方法的实例在列表中。 -
@RoryO'Kane 当然,如果“每种类型的源”不是确定性的,那么单元测试方法就会失败。 (就像它可以从插件加载一样。)无论如何,对实现本身进行测试会更合适。
-
你可以添加一个测试助手,它可以很容易地包含在测试子类的有效性中,类似于例如可用for ActiveModel