今天我遇到了对象编程风格,具体类型或接口的基本悖论。
对于方法的返回类型更好的选择:具体类型还是接口?
在大多数情况下,我倾向于使用具体类型作为方法的返回类型。因为我相信具体类型更灵活,可以进一步使用并提供更多功能。
黑暗的一面:耦合。 天使之一:具体类型包含您最初将要返回的界面以及额外的功能。
你拇指的规则是什么?
这有什么编程原则吗?
BONUS :这就是我的意思ReadOnlyCollection or IEnumerable for exposing member collections?
答案 0 :(得分:7)
经验法则,在返回类型中,尽可能具体,参数类型尽可能不具体。也喜欢接口,因为如果需要,您可以稍后交换您的实现,而无需更改API的客户端。
答案 1 :(得分:5)
我的经验法则:
1)最初,我让方法返回接口类型,因为如果需要,以后总是很容易将其更改为具体类型。更难以回到其他方面。
2)即使声明方法返回具体类型,我也会尽可能地将调用者编码为使用接口类型:
InterfaceType i = xyz.methodThatReturnsConcreteType();
。
3)我是否拥有调用代码也有所不同(内部与公共API):
其他考虑因素:
总之,
答案 2 :(得分:1)
有趣的问题。我相信你必须问问自己如何使用返回数据。如果你有
那么使用古老的汽车比喻public AccelerationResponse PressAccelerator(float force) {}
您可能希望返回界面而不是类。您可以根据特定条件不同地解释此响应。
如果保证您的返回只能以具体实现所期望的方式使用,那么使用该类是有意义的。我不确定任何被广泛接受的原则,但我的经验法则是,如果返回类型可以在不同的实现中重用,那么界面更有意义。