32

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

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

即使我并不真正设想我真的想做上述任何事情,我也会遵循这种做法;我仍然认为这是一种很好的做法,以防万一。我认为这是一种相当普遍的方法。

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

4

2 回答 2

31

Scala 有一些特性,它们是正在破解的接口。确实,它们应该是接口,诚然,在构造函数方面存在限制,但考虑到如果你有两个接口都具有构造函数的要求,那么这并不是什么大问题,你会遇到同样的问题。

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

再加上伴随的对象,突然之间,工厂和更多的东西变得更加微不足道。

Given that's the case, you really can get away from having to use interfaces everywhere, and with more powerful generics system, some of what gets done with interfaces gets sucked up there.

Generally looking at Scala code it tends to be rather decomposed, and interfaces don't seem to be the main tool in that.

于 2009-03-24T00:47:26.150 回答
4

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

这似乎不是一种常见的模式(至少在我见过的 Scala 中),但如果这是你真正想做的,我想不出一个好的论据来反对它。

另一方面,我不认为我会那样做(当我有实际需要时我会进行重构,而不是为可能永远不会到来的假设未来构建这种“灵活性”)。但是我能想到的反对它的最佳论点是避免不必要的间接性的类比(当你需要的只是一个整数时,不要使用指向指向整数的指针的指针),这不是很引人注目。

于 2009-03-23T16:53:57.253 回答