使用全局对象或参数传递配置数据,哪一个在Scala中更好?

时间:2016-11-25 10:52:48

标签: scala

我是Scala的新手,我有多年的Java编程经验。

通常有两种模式传递一些配置:

  • 使用全局对象听起来像#34; ConfigManager"。每次我 我需要一个直接来自它的配置。
  • 通过参数传递配置。配置参数可能存在于 程序中有很多层。

我选择一种模式取决于我在编写Java时如何使用配置。

但在斯卡拉,许多人谈到消除副作用。这让我想知道是否应该不惜一切代价使用第二种模式。

Scala中哪种模式更好?

2 个答案:

答案 0 :(得分:4)

全局对象不好:pom.xml

使每个组件将其配置(单个部分)作为构造函数参数(可能具有一些默认值)。这可以防止创建尚未配置的无效组件或组件。

您可以在单个类中收集配置值的初始处理,以集中配置代码,并在缺少事件时快速失败。但是,不要使您的组件(需要配置的类)依赖于全局对象或将整个配置作为参数。他们需要什么作为构造函数params。

示例:

char arr[10][2]

答案 1 :(得分:1)

使用全局对象(此对象仅存储只读不可变数据,因此没有问题)一次加载配置对象和配置变量。与在代码深处加载配置相比,这有很多好处。

object ConfigParams {
  val config = ConfigFactory.load()
  val timeInterval = config.getInt("time_interval")
  ....
}

优点:

  1. 防止运行时错误(快速失败方法)。

    如果您错过拼写任何属性名称,您的应用程序在启动期间失败,因为您正在尝试急切地获取数据。如果这是深入代码库内部那么它很难知道,并且当程序的控制进入该行时它会失败。因此,除非进行严格的测试,否则无法轻易检测到。

  2. 所有配置逻辑和配置转换的中心位置(

    这是所有配置逻辑的中心位置。易于改变和维护。

  3. 无需重构代码即可完成转换。

  4. 可维护和可读。

  5. 轻松重构。

  6. 功能编程观点

    是的,从Fail快速的角度来看,热切地加载配置文件是个好主意,但它不是一个好的函数式编程实践。

    但重要的是你没有将副作用与任何其他逻辑混合并在加载应用程序时将其保持分离。因此,当您在项目开始时隔离副作用和副作用时,这将不是一个程序。

    完成副作用并启动应用程序。您的纯代码库不会受此影响,并保持纯净和干净。因此,虽然它是副作用,但它是孤立的,不会影响您的代码库。再次从中受益是值得体验的,所以请继续。