在Scala中跨类共享通用对象的推荐模式

时间:2018-08-22 21:51:16

标签: scala traits

我只是在研究Scala,我有几个问题,这些问题涉及跨类共享常用属性(例如记录器,数据库句柄和配置)的最佳方法,而无需传递它们。

我们可以创建一个具有记录器,句柄和应用程序的单例类,但这在我看来是错误的,因为对单例进行任何子类化都不是更专门的情况。

我看到Scala具有一个特质的概念,我相信它就像一个混合素。将特征与单例结合起来是否可行?如果不是,推荐的方法是什么?

2 个答案:

答案 0 :(得分:1)

在整个包中共享公共实体的最佳做法是在包对象文件中声明它们。

在此处https://alvinalexander.com/scala/scala-package-objects-how-to-name-location-cookbook-recipe

答案 1 :(得分:1)

这是一个很大的主题,没有一个正确的最佳方法-您的问题很广泛。如果您想获得更大的了解,我会花一些时间在上面进行阅读:-

  • Mixin特质是一种用可重用的行为来修饰类的流行方法-自定义记录器就是一个很好的例子。假设您确实确实需要自定义日志记录库行为。

  • 对于配置和数据库连接,mixin特性也可以工作,但是某些框架例如。播放使用依赖项注入作为类获取其依赖项的一种方式。请注意,有编译时和运行时DI框架。

  • 另一种不那么常见的方法(可能更复杂)是使用方面(AOP)-https://www.google.co.uk/search?ei=1iN-W6neNePWgAb05orYAQ&q=scala+aop&oq=scala+aop

如果您刚刚起步,请选择一些流行的库-阅读他们的文档-并让他们指导您如何最好地采用它们,例如。

记录-https://github.com/lightbend/scala-logging
配置-https://github.com/lightbend/config