相关疑难解决方法(0)

使用抽象类而不是特征有什么好处?

使用抽象类而不是特性(除了性能)有什么好处?在大多数情况下,似乎抽象类可以被特征替换.

scala traits

362
推荐指数
6
解决办法
9万
查看次数

带有继承和mixins的Scala可测试代码

我用Java开发了很多代码,并涉足Groovy和Haskell,现在我已经把我带到了Scala.

我对Scala的功能方面感到相对舒服,但我发现自己在Scala中的面向对象设计上有些不稳定,因为它感觉与Java有点不同,特别是由于特性/混合.

我的目标是编写尽可能可测试的代码,这在我的Java开发中一直都是关注的

  • 尽可能的不变性
  • 倾向于由构造者注入状态
  • 总是去构成而不是继承(受SO影响很大,可能对此帖子过度反应)

现在我正试图在这个新的Scala领域站起来,我很难弄清楚我应该采取什么方法,特别是我是否应该为某些目的开始使用继承.

编程Scala(Wampler和Payne; O'Reilly,第2版)有一个考虑因素("良好的面向对象设计:一个题外话"),我已经阅读了很多关于SO的帖子,但我还没有看到明确提到可测试性的设计考虑因素.本书提供了有关使用继承的建议:

  1. 抽象基类或特征由具体类(包括案例类)分为一级.
  2. 除了两种情况外,具体类永远不会被子类化:
    • 混合在特征中定义的其他行为的类(...)
    • 仅测试版本,以促进自动化单元投影.
  3. 当子类化似乎是正确的方法时,考虑将行为划分为特征并改为混合这些特征.
  4. 永远不要跨父子类型边界拆分逻辑状态.

对SO的一些挖掘也表明,有时混合比组合更好.

所以本质上我有两个问题:

  1. 是否有一些常见的情况,即使考虑可测试性,使用继承会更好?

  2. 混合是否提供了增强代码可测试性的好方法?

java oop unit-testing scala testability

9
推荐指数
1
解决办法
941
查看次数

特征与模板

我是新的scala,我想知道特征和模板之间的区别是什么?我何时应该使用模板?何时应该使用特征?谢谢

scala

1
推荐指数
1
解决办法
555
查看次数

标签 统计

scala ×3

java ×1

oop ×1

testability ×1

traits ×1

unit-testing ×1