设计一个简单的工作报价系统

时间:2011-05-24 21:30:06

标签: c# sql-server oop

根据两个属性 type value ,实施简单报价系统以确定工作成本的最佳方法是什么。

作业成本将确定落入类型的范围。

例如:

作业类型A将花费

  • $ 0-150之间的价值$ 80
  • $ 150-300之间的价值100美元
  • 价值$ 120> $ 300

作业类型B将花费

  • $ 0-120之间的价值$ 50
  • 100美元,价值在120-250美元之间
  • 120美元以上的价值120美元
  • 价值150美元> $ 500

频段范围应该是可配置的,每个作业类型可以有不同的频段范围。

频段范围和成本可能会发生变化,最终会存储在通过存储库模式访问的SQL Server数据库中,因此我可以为TDD实现模拟存储库。

我最初的开发使我在下面有一个代表乐队的轻量级课程

public class JobCostBand
{
    public int ID { get; set; }
    public string Type { get; set; }
    public float ValueLowerBand { get; set; }
    public float ValueUpperBand { get; set; }
    public float Cost { get; set; }
}

我有一个模拟存储库,使用LINQ从这些对象的内存列表中选择以返回成本。这个类可以很容易地映射到SQL表,从而可以使用LINQ to SQL在我的最终数据库存储库中查找成本。

我的问题是如何处理给定作业类型的最后一个乐队。我开始使用 float.MaxValue 作为上部乐队,但这并不适合我。然后,我考虑使用大写或小写值来指定JobCostClass中的波段,但这又不是很好。我是在考虑这个问题还是错过了一种简单的建模方法?

1 个答案:

答案 0 :(得分:0)

您要尝试的工作是将输入值映射到波段。您如何表示它是次要问题。因此,您应该专注于能够为给定输入值返回正确波段的对象。

我坚持只为每个JobCostBand代表一个上限或下限。如果给定频带的上限值低于下一频带的下限值,则上频带也可以为可空值。有一个'manager'对象可以保存band的集合,并且能够根据值查询它们并确定哪个是最合适的。我会将它们存储在一个排序列表中(按较低的波段阈值排序),然后按顺序遍历数组直到波段匹配。