public ShoppingResult Compute() { TaxCalculator basicCalculator = BasicFactory.CreateFactory(); TaxCalculator importCalculator = ImportFactory.CreateFactory(); var totalBasicTax = 0.0m; var totalImportTax = 0.0m; shoppingResult.TotalWithoutTax = preparedCart.Sum(x => x.Price); shoppingResult.ItemsBilled = preparedCart; shoppingResult.TaxDetail = new List <TaxDetail>(); foreach (var item in preparedCart) { if (!item.IsExempted()) { totalBasicTax += basicCalculator.GetTaxAmount(item); TaxDetail.BasicTaxAmount = basicCalculator.GetTaxAmount(item); } else { TaxDetail.BasicTaxAmount = 0.0m; } if (item.IsImported) { totalImportTax += importCalculator.GetTaxAmount(item); TaxDetail.ImportTaxAmount = importCalculator.GetTaxAmount(item); } shoppingResult.TaxDetail.Add(TaxDetail); } shoppingResult.TotalImportTax = totalImportTax; shoppingResult.TotalSalesTax = totalBasicTax; shoppingResult.TotalTax = totalImportTax + totalBasicTax; shoppingResult.Total = shoppingResult.TotalWithoutTax + totalImportTax + totalBasicTax; return(shoppingResult); }