main
 1namespace domain
 2{
 3  using System;
 4  using System.Collections.Generic;
 5  using System.Linq;
 6
 7  public class DeclineCurve
 8  {
 9    IDictionary<int, IQuantity> production = new Dictionary<int, IQuantity>();
10    IComposition split = new CommoditySplits();
11
12    public void Add(int month, IQuantity quantity)
13    {
14      production[month] = quantity;
15    }
16
17    public TypeCurve StartingOn(Month initialProductionMonth)
18    {
19      return new TypeCurve(CreateProductionFor(initialProductionMonth));
20    }
21
22    IEnumerable<Production> CreateProductionFor(Month initialProductionMonth)
23    {
24      foreach (var quantity in production)
25        yield return new Production(initialProductionMonth.Plus(quantity.Key), quantity.Value, split);
26    }
27
28    public void Composition<Commodity>(Percent percent) where Commodity : ICommodity
29    {
30      split.SplitFor<Commodity>(percent);
31    }
32  }
33}