我可以使用什么代替Ruby(或任何其他动态语言)中的Interfaces?


9

我的目标是定义类之间的合同。

我喜欢鸭子输入法,但我也想在应用程序的不同层之间定义一个接口,以清楚地定义哪些是从外部调用的方法,哪些是另一层不应使用的辅助方法。 。

例如,在Java中,我可以使用诸如get()和save()之类的方法定义Persistor接口,然后使用需要在数据库上持久保存的所有方法来定义JdbcPersistor类。也许还有另一个RestPersistor,具有其他方法可以保存在远程Restserver上。

我不是在Ruby中请求接口,只是想知道是否有一种巧妙的方法来保持这种区别。我喜欢Ruby,但是我只从事小型项目。


我认为这属于StackOverflow ...
thorstenmüller2011年

2
@thorsten堆栈溢出用于特定的实现问题(即代码中存在问题)。常规程序设计问题在Programmers.SE上具有主题。

@Mark:感谢您的纠正。我认为它在Ruby上过于具体(并且错过了Uberto的最后一句话)。因此,我更新了有关常见问题的知识。(仍然在这里找到我的出路)
thorstenmüller2011年

+1个好问题。我感兴趣的是,除了写,阅读和更新大量文档之外,还是使用一些愚蠢的约定(例如带下划线的内部辅助方法或类似的东西),我是否感兴趣。
乔纳斯

+1顺便说一句,PLT球拍支持合同,而且是动态的。添加类似于Ruby的东西将是一个有趣的项目。
拉里·科尔曼

Answers:



2

一些动态类型的语言具有接口或类似的概念。例如,Objective-C具有协议。但大多数不是。为了在动态语言中发挥作用,您必须忘记对静态类型语言的了解,并接受该语言的动态性质。动态类型语言通常避免使用接口。


1

在Perl 5中,MooseMoo都提供了可能需要实现某些方法的角色(或特征)。Moose还附带了运行时类型系统,该系统允许您定义duck_type,这是一种类型,用于声明具有必需方法集的对象。

角色由类(或其他角色)自己实现,并且不仅提供接口,还提供实现和行为。但是它们也(至少在Moose中)处理诸如方法冲突检测之类的事情。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.