Scala 编程:类型扩展与使用子句深入解析
1. 类型扩展的明智使用
在 Scala 中,混入(Mixins)、扩展方法和类型类为开闭原则提供了强大且有原则的解决方案,同时允许类型的核心实现遵循单一职责原则。然而,在使用类型扩展时,我们需要谨慎考虑一些问题。
首先,我们思考一下极端的做法:定义状态和行为极少的类型(有时称为贫血类型),然后使用混入特质、类型类、扩展方法甚至隐式转换来添加大部分行为。但这种做法存在一些弊端。
- 编译性能问题 :使用类型类或隐式转换时,编译器的解析算法需要比在类型的原始定义中查找逻辑做更多的工作。而且,编写扩展可能会比在类型内部定义构造更繁琐。因此,过度使用这些工具的项目构建速度会变慢,代码也可能难以理解。
- 面向对象特性的损失 :
- 代码演进挑战 :如果扩展依赖于它们所扩展类型的细节,代码演进会变得困难。例如,扩展和类型定义的细节需要在多个地方进行协调。不过,类型定义和扩展之间的耦合仅限于公共接口,因为扩展无法访问类型的私有或受保护成员。
- 面向对象方法调度的损失 :在实现多态方法时,可能需要一些技巧。例如,为了支持
Shape.toJSON的多态性,我们可能需要一些额外的处理。如果toJSON在Shape中声明为抽象方法,并在Circle、Rectangle <
超级会员免费看
订阅专栏 解锁全文
7

被折叠的 条评论
为什么被折叠?



