我想要一个全局/应用级别设置,我想在我的富域模型中使用它。
我有一种方法可以根据传递的参数进行一些计算。
这可能不是最好的示例,并且可能看起来不像属于域模型的方法,但我尽量保持简单,以便您理解问题。
public decimal Calculate(CalculationMethod calculationMethod)
{
switch (calculationMethod)
{
case CalculationMethod.Multiply:
return _x * _y; // _x and _y are fields
case CalculationMethod.Divide:
return _x / _y;
}
}
现在假设我在其他领域模型中有很多这样的方法,它们也接受CalculationMethod
他们的方法。我想要一个全局设置,这样我就可以全局设置一个计算方法,以便所有将其作为参数的方法都可以使用它。
一种解决方案是每次调用此方法时都读取配置。
我想知道是否有更好的方法让我可以CalculationMethod
全局设置并且永远不会传递它,而是拥有某种静态变量(单例)来保存计算方法并直接在我的方法中读取它而不传递它。但我认为那时会有线程安全的问题。
public decimal Calculate()
{
// or read it from file here?
switch (GlobalSettings.CalculationMethod)
{
case CalculationMethod.Multiply:
return _x * _y; // _x and _y are fields
case CalculationMethod.Divide:
return _x / _y;
}
}
我不能在构造函数中传递它,因为它不属于我的域模型。
如何处理这类问题?有没有比我提到的两个更好的方法?
我在 Mark Seemann 的回答下的评论中问了这个问题:DDD 中的应用程序级设置?