我只是在研究Scala,我有几个问题,这些问题涉及跨类共享常用属性(例如记录器,数据库句柄和配置)的最佳方法,而无需传递它们。
我们可以创建一个具有记录器,句柄和应用程序的单例类,但这在我看来是错误的,因为对单例进行任何子类化都不是更专门的情况。
我看到Scala具有一个特质的概念,我相信它就像一个混合素。将特征与单例结合起来是否可行?如果不是,推荐的方法是什么?
答案 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