main
1namespace domain
2{
3 using System;
4 using System.Collections.Generic;
5 using System.Linq;
6
7 public class Gas : ICommodity
8 {
9 public Percent PercentageFrom(IComposition composition)
10 {
11 return composition.PercentageFor<Gas>();
12 }
13 }
14
15 public class Oil : ICommodity
16 {
17 public Percent PercentageFrom(IComposition composition)
18 {
19 return composition.PercentageFor<Oil>();
20 }
21 }
22
23 public class NGL : ICommodity
24 {
25 public Percent PercentageFrom(IComposition composition)
26 {
27 return composition.PercentageFor<NGL>();
28 }
29 }
30
31 public class Condensate : ICommodity
32 {
33 public Percent PercentageFrom(IComposition composition)
34 {
35 return composition.PercentageFor<Condensate>();
36 }
37 }
38
39 public class All : ICommodity
40 {
41 public Percent PercentageFrom(IComposition composition)
42 {
43 return composition.PercentageFor<Gas>()
44 .Plus(composition.PercentageFor<Oil>())
45 .Plus(composition.PercentageFor<NGL>())
46 .Plus(composition.PercentageFor<Condensate>());
47 }
48 }
49
50 public interface ICommodity
51 {
52 Percent PercentageFrom(IComposition composition);
53 }
54}