gpt4 book ai didi

c# - 我如何重构/扩展以下模型

转载 作者:太空宇宙 更新时间:2023-11-03 20:39:51 24 4
gpt4 key购买 nike

我目前有一个缓存实现(使用数组)用于模拟期间执行的大量计算。缓存的结构如下:

alt text

它的工作方式:

CalculationsAbstract calculationsCache = new CalculationsCache();

// Constructor of CalculationsCache
public CalculationsCache()
{
this.Proxy = new Calculations();
Proxy.Proxy = this;
}

calculationsCache.CalculateValue1();
// Checks "Value1" array for existing value, if not, the actual computation is called
// via Proxy object, value retrieved is cached in array then returned to user.

现在,我正在尝试添加特定于特定场景的新计算,并且不适合将它们放置在 CalculationsAbstractCalculations 中和 CalculationsCache,但是 ScenarioA 仍会使用旧类中的现有计算。

我正在尝试在名为 ScenarioACalculationsScenarioACalculationsCache 的新类中添加新的计算及其数组,就像为 Value1、Value2 所做的一样...等等,但我对这些新类如何适应现有模型感到困惑。

这是我尝试做的:

internal interface IScenarioACalculations 
{
float GetScenarioAValue5();
}

ScenarioACalculations : Calculations, IScenarioACalculations
ScenarioACalculationsCache : CalculationsCache, IScenarioACalculations

鉴于在我的整个项目中,我只持有对类型 CalculationsAbstract 的引用(如上面的代码示例中所示),并且我无法将我的 IScenarioACalculations 对象转换为CalculationsAbstract,将来添加场景 A 计算和可能的场景 B 等的最佳方法是什么?

抱歉拖了这么久。

谢谢。

最佳答案

基本上,您在 CalculationsCache 中有一个装饰器。由于在 Calculations 对象周围编写如此薄的层将是一个维护问题,因此您应该将缓存放在 Calculations 对象本身中。

试试这个:

Scenario
{
IDictionary<int, float> cache = new Dictionary<int, float>;

void Reset()
{
cache.Clear();
}
}

PhysicsScenario : Scenario
{
const int AccelerationType = 1; // or string, or whatever. Just needs to be a key into the cache.
float[] CalculateAcceleration()
{
if (cache.Keys.Contains(AccelerationType))
{
return cache[AccelerationType];
}
else
{
float[] values = ActualCalculateAcceleration();
cache.Add(AccelerationType, values);
return values;
}
}
float[] CalculateVelocity() {...}
// More heavy calculations
}

ChemistryScenario : Scenario
{
float[] CalculateVolume() {...}
float[] CalculateCalorificValue() {...}
// More heavy calculations
}

您不会谈论缓存对象的生命周期管理。如果它与您的计算对象完全相同,您可能可以使用它。

如果还有其他事情发生,您可以使用控制反转原则将缓存字典从容器中传入。

关于c# - 我如何重构/扩展以下模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3478109/

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