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}