namespace domain { using System; using System.Collections.Generic; using System.Linq; public class Gas : ICommodity { public Percent PercentageFrom(IComposition composition) { return composition.PercentageFor(); } } public class Oil : ICommodity { public Percent PercentageFrom(IComposition composition) { return composition.PercentageFor(); } } public class NGL : ICommodity { public Percent PercentageFrom(IComposition composition) { return composition.PercentageFor(); } } public class Condensate : ICommodity { public Percent PercentageFrom(IComposition composition) { return composition.PercentageFor(); } } public class All : ICommodity { public Percent PercentageFrom(IComposition composition) { return composition.PercentageFor() .Plus(composition.PercentageFor()) .Plus(composition.PercentageFor()) .Plus(composition.PercentageFor()); } } public interface ICommodity { Percent PercentageFrom(IComposition composition); } }