当多态性不是(还)问题时,我应该使用协议吗?

时间:2013-05-02 21:49:39

标签: clojure

我很少使用协议,所以我还没有完全正确使用它们的感觉。对我来说,它们看起来非常像Java接口,其优点是可以很好地分离类型和操作。

除了解决表达式问题,我理解协议是一种以有意义的方式对功能进行分组的方法。

因此,如果我有一个记录和一组相关的函数来操作该记录,我可以定义一个协议。但是,如果我没有任何其他数据类型参与该协议,它会感觉像是滥用该模式。此外,是不是增加了不必要的复杂性?

关于何时使用协议以及何时坚持使用普通旧功能,是否有任何关于该问题的理由或至少某些约定?

1 个答案:

答案 0 :(得分:4)

我的简短而自以为是的答案必须是否定的。

在我的意见中,如果您不打算让其他类型的人参与协议,那么使用协议会带来轻微的不便。当您重新加载定义协议的文件时,协议实例不会自动重新加载,这会让人感到有些困惑。如果你打算在别处参与协议,或者甚至有理由相信你可能会这样做,那么它们是值得的,尽管在你的情况下我不得不说不。

我的惯例/经验法则:
坚持使用普通的旧函数,直到您认为可以发现表达式问题的开头,然后使用协议。