我有以下课程:

CachedObject
CachedObjectSource
CachedObjectDbSource < CachedObjectSource
CachedObjectDalliSource < CachedObjectSource

cachedobject是从第三方api获取并存储在本地的非数据库对象。cachedobject将同时存储在数据库和dalli(memcache)中,实时代码将ping dalli源以获取对象的副本,如果对象不存在,dalli源将搜索数据库源并更新其缓存。所以这是一个嵌套调用,要求cachedobjectsource的每个子类实现相同的方法集。例如,一个接口。
是否有方法编写cachedobjectsource类,以便其子类必须实现接口?我是不是走错了路?

最佳答案

露比不知道类似于Java的接口。相反,ruby程序通常使用一种称为Duck Typing的方法,这基本上意味着您可以将任何消息发送到任何对象,然后该对象可以决定它是否会对此做出响应,即每个对象决定它自己拥有的方法。
最接近“接口”的是一个类(或模块),它实现了一个方法,但只引发一个类似的NotImplementedError

class CachedObjectSource
  def my_method
    raise NotImplementedError, "Implement this method in a child class"
  end
end

这样,方法将出现,并在调用时返回一个合理的错误,而不会在子类中被重写。然后,您应该编写一些文档,明确哪些子类必须实现才能兼容。

07-26 04:35