gpt4 book ai didi

c# - 类中相关计算属性的设计模式?

转载 作者:太空狗 更新时间:2023-10-29 21:36:37 25 4
gpt4 key购买 nike

我有一个代表包含许多计算属性的域实体的类​​。大多数计算都取决于同时计算的其他属性。在最简单的形式中,该类的示例可能如下所示。

public class AnalysisEntity
{
public decimal InputA { get; set; }
public decimal InputB { get; set; }
public decimal InputC { get; set; }

public decimal CalculatedValueA
{
get { return InputA * InputC; }
}

public decimal CalculatedValueB
{
get
{
decimal factor = FactorGenerator.ExpensiveOperation();
return CalculatedValueA / factor;
}
}

public decimal CalculatedValueC
{
get { return InputA * InputB; }
}

public decimal CalculatedValueD
{
get { return (CalculatedValueA * InputB) / CalculatedValueB; }
}

public decimal CalculatedValueE
{
get { return CalculatedValueD / aConstant; }
}
}

但是,这个解决方案给我带来了以下问题:

  1. 这是低效的,因为一些计算(其中一些计算很长)被重复调用。
  2. 如果不为所有相关计算首先提供所有必需的输入,就很难单独对单个计算进行单元测试。
  3. 很难有效地从持久性中检索(我使用的是 NHibernate),因为即使计算的数据可以存储到数据库中,它也不会被检索,而是在读取对象时重新计算。
  4. 随着所需输入的单元测试变得越来越大,很难添加计算。

我已经尝试使用计算器对象和策略模式来为属性设置内部字段,但我最终得到了一个过长的控制函数来强制进行计算。此外,将所有计算移出到另一个对象会将原始实体变成贫血域对象,我应该避免继续阅读。

我应该使用什么设计模式和类结构来解决上述问题?

谢谢

最佳答案

在写入路径上执行工作,而不是读取路径。然后,您可以放心地从持久层填充最新的缓存值。

因此,当值 A 被写入时,所有依赖于 A 的计算都会重做。

此方案在读取次数大于写入次数的情况下效果很好。

关于c# - 类中相关计算属性的设计模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4028850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com