在Java
中,我通常会将整个域声明为interface
,可能会使用某种Factory
来实现我的实现。这部分是因为我太老了我记得当一些持久层需要实现类来子类化一个特定的类时,我也可以这么说:
即使我没有想到我真的想要做上述任何一项,我也会遵循这种做法;我仍然相信这是一个很好的做法以防万一。我认为这是一种相当常见的方法。
如果我声明所有域对象abstract
,这在Scala-land中会不常见吗?上面的点也适用于Scala吗?
答案 0 :(得分:31)
Scala有特征,它们是破解界面。实际上,它们应该是接口应该是什么,不可否认,在构造函数方面存在局限性,但考虑到如果你有两个接口都有构造函数的要求你会遇到这个问题,这并不是什么大问题。同样的问题。
然后有部分方法,并且在很多方面,许多基于依赖管理的良好面向对象设计原则几乎可以被视为获得更易组合的工作单元的方法,你真的不得不怀疑。而不仅仅是能够处理方法输入和输出,或者使用策略对象/方法的预定义点,您可以更灵活。
添加到那个伴侣对象和所有突然的工厂,更多的东西变得更加琐碎。
考虑到这种情况,你真的可以摆脱不得不在任何地方使用接口,并且使用更强大的泛型系统,接口完成的一些功能会被吸引到那里。
一般来说,看看Scala代码,它往往会被分解,并且接口似乎不是其中的主要工具。
答案 1 :(得分:3)
这是一个非常引人深思的问题。
它似乎不是一种常见的模式(至少在我看过的Scala中),但是如果那是你真正想要的话,我无法想到一个好的反对它的论点。做。
另一方面,我不认为我这样做(当我有实际需要时我会重构,而不是为假设建立这种“灵活性”)未来可能永远不会到来)。但是我能想到的反对它的最好的论据是避免不必要的间接的类比(当你需要的是一个整数时,不要使用指向指向整数的指针的指针),而且这不是很引人注目。