public void Apply(Rating rating) { try { var adjustedAmount = rating.ApplyTo(amount); var difference = adjustedAmount - amount; amount = adjustedAmount; ApplyEvent(new RatingApplied(rating.GetType().Name, adjustedAmount, difference)); } catch (DeclinedException exception) { ApplyEvent(new Declined(exception.Reason)); } }