我有以下课程:
CachedObject
CachedObjectSource
CachedObjectDbSource < CachedObjectSource
CachedObjectDalliSource < CachedObjectSource
Run Code Online (Sandbox Code Playgroud)
CachedObject是一个非数据库对象,它从第三方API中提取并存储在本地.CachedObject将存储在数据库和Dalli(memcache)中,实时代码将ping Dalli源以获取对象的副本,并且Dalli源将搜索数据库源并在对象不存在时更新其缓存.所以它是一个嵌套调用,要求CachedObjectSource的每个子类实现相同的方法集.IE,一个界面.
有没有办法编写CachedObjectSource类,以便其子类必须实现接口?我是以错误的方式来做这件事的吗?
Hol*_*ust 19
Ruby不知道类似于Java的接口.相反,Ruby程序通常使用名为Duck Typing的方法,这基本上意味着您可以向任何对象发送任何消息,然后可以决定它是否会响应,即每个对象自己决定它具有哪些方法.
最接近"接口"的是实现方法的类(或模块),但只提出NotImplementedError类似于此的方法:
class CachedObjectSource
def my_method
raise NotImplementedError, "Implement this method in a child class"
end
end
Run Code Online (Sandbox Code Playgroud)
这样,该方法将存在并在被调用时返回合理的错误,而不会在子类中被覆盖.然后,您应该编写一些文档,明确哪些子类必须实现符合要求.