Scala和接口

oxb*_*kes 31 java scala interface

Java我通常会将我的整个域声明为interfaces,可能有一些Factory让我实现.这部分是因为我太老了我记得当一些持久层需要实现类来子类化特定类时,我也可以轻松地:

  • 用于测试目的的模拟对象
  • 必要时在运行时代理对象
  • 提供不同的实现

即使我没有真正想到我真的想要做上述任何一项,我也会遵循这种做法; 为了以防万一,我仍然认为这是一种很好的做法.我认为这是一种相当常见的方法.

如果我声明所有域对象,这在Scala-land中会不常见abstract吗?对于Scala,以上几点也适用吗?

Sae*_*aem 31

Scala具有特征,它们是破解界面.实际上,它们应该是接口应该是什么,不可否认,在构造函数方面存在局限性,但考虑到如果你有两个接口都有构造函数的要求你会遇到这个问题,这并不是什么大问题.同样的问题.

然后有部分方法,并且在很多方面,许多基于依赖管理的良好面向对象设计原则几乎可以被视为获得更可组合的工作单元的方式,你真的不得不怀疑.而不仅仅是能够处理方法输入和输出,或者使用策略对象/方法的预定义点,您可以更灵活.

添加到那个伴侣对象和所有突然的工厂和更多变得更加微不足道.

鉴于这种情况,你真的可以摆脱不得不在任何地方使用接口,并且使用更强大的泛型系统,接口完成的一些功能会被吸引到那里.

通常看Scala代码它往往会被分解,并且接口似乎不是主要的工具.


Mar*_*usQ 5

这真是一个发人深省的问题。

这似乎不是一个常见的模式(至少在我见过的 Scala 中),但如果这就是你真正想做的事情,我无法立即想到反对它的好论据。

另一方面,我认为不会那样做(当我有实际需要时,我会重构,而不是为可能永远不会到来的假设未来建立这种“灵活性”)。但我能想到的反对它的最好论点是避免不必要的间接寻址(当您需要的只是一个整数时,不要使用指向整数的指针的指针),这并不是很有说服力。

  • “我认为预先做接口会迫使你提前思考你的领域模型,而不会陷入实现中”——是的,但这是一把双刃剑。在涉及实现的实际情况之前修复组件的接口可能意味着您会遗漏一些明显的东西。 (2认同)