// Sample business method that uses Policy public void ApplyRebate(IRebatePolicy rebatePolicy) { CheckIfDraft(); _rebatePolicy = rebatePolicy; Recalculate(); }
public OrderLine(Product product, int quantity, IRebatePolicy rebatePolicy, Order order) { Product = product; Quantity = quantity; Order = order; Recalculate(rebatePolicy); }
public void Recalculate(IRebatePolicy rebatePolicy) { RegularCost = Product.Price.MultiplyBy(Quantity); Money rebate = rebatePolicy.CalculateRebate(Product, Quantity, RegularCost); EffectiveCost = RegularCost - rebate; }
public void SetRebatePolicy(IRebatePolicy rebatePolicy) { if (_rebatePolicy != null) { throw new IllegalStateException("Rebate policy has been already set"); } _rebatePolicy = rebatePolicy; }
// Sample technique of injecting Policy into the Aggregate. // Can be called only once by Factory/Repository. internal void SetRebatePolicy(IRebatePolicy rebatePolicy) { if (_rebatePolicy != null) { throw new IllegalStateException("Policy is already set! Probably You have logical error in code"); } _rebatePolicy = rebatePolicy; }
public VipRebate(IRebatePolicy decorated, Money minimalThreshold, Money rebateValue) : base(decorated) { if (rebateValue > minimalThreshold) { throw new ArgumentException("Rabate can't be graterThan minimal threshold"); } _minimalThreshold = minimalThreshold; _rebateValue = rebateValue; }
public void Handle() { Order order = _orderRepository.Get(14); RebatePolicyFactory rebatePolicyFactory = new RebatePolicyFactory(_orderRepository, order.Customer); IRebatePolicy rebatePolicy = rebatePolicyFactory.CreateRebatePolicy(); order.SetRebatePolicy(rebatePolicy); order.AddProduct(new Product()); }
private void Recalculate(IRebatePolicy rebatePolicy) { TotalRegularPrice = Product.Price * Quantity; if (HasAnyRebates(rebatePolicy)) { TotalEffectivePrice = rebatePolicy.CalculateRebate(Product.Price, Quantity); } else { TotalEffectivePrice = TotalRegularPrice; } }
public void Handle() { int customerId = 12; Customer customer = _customerRepository.GetCustomer(customerId); RebatePolicyFactory rebatePolicyFactory = new RebatePolicyFactory(_orderRepository, customer); IRebatePolicy rebatePolicy = rebatePolicyFactory.CreateRebatePolicy(); OrderFactory orderFactory = new OrderFactory(customer, rebatePolicy); Order order = orderFactory.CreateOrder(); //TODO: Save order into the store }
public Order CrateOrder(Client client) { CheckIfClientCanPerformPurchase(client); Order order = new Order(client.Id, Money.Zero, OrderStatus.Draft); Injector.InjectDependencies(order); IRebatePolicy rebatePolicy = RebatePolicyFactory.CreateRebatePolicy(); order.SetRebatePolicy(rebatePolicy); AddGratis(order, client); return(order); }
protected RebateDecorator(IRebatePolicy decorated) { Decorated = decorated; }
public void IncreaseQuantity(int quantity, IRebatePolicy rebatePolicy) { Quantity += quantity; Recalculate(rebatePolicy); }
private bool HasAnyRebates(IRebatePolicy rebatePolicy) { return(rebatePolicy != null); }
public void IncreaseQuantity(IRebatePolicy rebatePolicy) { Quantity++; Recalculate(rebatePolicy); }
public OrderLine(Product product, IRebatePolicy rebatePolicy) { Product = product; Recalculate(rebatePolicy); }
public OrderFactory(Customer customer, IRebatePolicy rebatePolicy) { _rebatePolicy = rebatePolicy; _customer = customer; }