Scala:单例对象上的setter

时间:2016-10-01 23:34:52

标签: scala

我的Scala应用程序(Akka服务)有一个PersonBuilder

这个PersonBuilder类有一个REST客户端,可以在构建实体之前检索一些数据。

我的应用程序中任何时候都应该只有一个实例。{/ p>

显然,我可以在这里使用PersonBuilder对象,但问题是我想在运行单元测试时传入模拟REST客户端。

在Scala中调用被视为不良做法的对象的setter? 如果它完成安全并保证只发生一次,那么肯定这是一种可以采用的技术吗?

显然,也可以使用封装的REST客户端创建一个类,但问题是我在没有依赖注入框架的情况下将所有PersonBuilder类传递给我的代码。

目前Scala是否有任何约定?

1 个答案:

答案 0 :(得分:3)

class PersonBuilder(rest: Rest)
object PersonBuilder extends PersonBuilder(LiveRest)
object TestPersonBuilder extends PersonBuilder(MockRest)

如果你不想要构造函数args,请使用traits。

trait PersonBuilder {
  def rest: Rest
}
object PersonBuilder extends PersonBuilder {
  override val rest = LiveRest
}