如何使用策略模式和实体框架构建模型

时间:2019-11-12 15:55:49

标签: c# entity-framework oop design-patterns mvvm

背景

我正在使用WPF和Entity-Framework为自己的工作构建应用程序。通常的想法是,它跟踪一家化工公司的测试结果。

每个产品都有批次和测试规格列表。每批都有样品。每个样本都有测试结果列表。每个测试结果要么是正常值,要么是根据其他测试结果计算得出的。

场景

例如,某产品具有

  1. 测试1只是一个值。
  2. 测试2只是一个值。
  3. 测试3是Test1 / Test2(Test3也可能类似于Test2 / 99.8)。

该产品每批次的每个新样品都需要列出这些测试的结果列表。

  • 如果我打电话给Test3.Result,我希望总是能计算出该结果。
  • 如果我致电Test1.Result,我希望始终收到输入的实际结果。
  • 我需要能够设置Test1和Test2的值,但不能设置Test3的值。

我的想法

我有一个带有几个派生版本的TestSpec类。相关的类是下面的基类:

// the base class for all test specifications
public abstract class TestSpec
{
    public TestResultCalculationStrategy Calculator { get; set; }
    public ICollection<TestResult> Results { get; set; }
}


public abstract class TestResultCalculationStrategy
{
    public TestSpec Spec { get; set; }
    public virtual double? Calculate(Sample sample);
}

public class DivisionTestResultCalculationStrategy : TestResultCalculationStrategy
{
    public TestSpec Numerator { get; set; }
    public TestSpec Denominator { get; set; }
    public override double? Calculate(Sample sample)
}


public class TestResult 
{
    public Sample Sample { get; set; }
    public TestSpec Spec { get; set; }
    public double? Result 
    {
        get => Spec.Calculator.Calculate(Sample);
        set => ???
    }
}

我的问题是,这种方法不能很好地工作,当我尝试将其连接到视图模型以编辑样本时,它几乎无法工作。

有人有更好的主意吗?

0 个答案:

没有答案