我目前正在建模一个负责管理版税支付的系统。版税可能很简单:
- 支付作者 A 收入的 15%
或与以下任何一个一样复杂:
- 向作者 B 支付 15% 的收入,最多售出 1000 件,然后支付收入的 12%
- 每售出 1000 件,还需向作者 B 支付 1.50 美元
或者:
- 向作者 C 支付前 1,000 美元收入的 15%,然后支付收入的 12%
简而言之,付款可以是每次销售的固定金额或收入的百分比。付款条件可以基于销售数量或收入。我试图通过指定支付范围和支付值的类型来设计一个包含所有这些灵活性的类(它与幕后的数据库表密切相关)。但是,我担心我可能试图让这门课做太多事情,如果我们将来需要适应其他场景,可能会让自己陷入困境。我正在寻求替代设计方法的建议。
public class PaymentRule
{
// I'm not 100% comfortable with this, as this will
// really be an Int32 value for quantity sold ranges
public decimal RangeMinimum { get; set; }
public decimal? RangeMaximum { get; set; }
// This will always be a decimal value, but may represent
// a dollar amount or percentage depending on the context
public decimal PaymentValue { get; set; }
// Specify a type for the range: QuantitySold or Revenue
public string RangeType { get; set; }
// Specify a type for the value: AmountPerEachSold or RevenuePercentage
public decimal ValueType { get; set; }
public decimal CalculateRoyaltyDue(int quantitySold, decimal revenue)
{
// ...
}
}
任何建议,将不胜感激。
2012 年 5 月 9 日更新:
我应该提到,这些规则必须保存到 SQL Server 数据库中。