Re: Фабрика объектов с разными конструкторами
От: · Великобритания  
Дата: 07.11.16 11:28
Оценка:
Здравствуйте, licedey, Вы писали:

L>Задача: реализовать IPaymentProcessor

Я бы как-то так сделал:

 public interface IBusinessRule
 {
        bool Validate();
 }

 class Rule1 : IBusinessRule
 {
      public Rule1(string name) { ... }
      bool Validate() { ... }
 }

 class Rule2 : IBusinessRule
 {
      public Rule1(int month, int year) { ... }
      bool Validate() { ... }
 }

 class CompositeBusinessRule : IBusinessRule
 {
      const IBusinessRule rules;
      CompositeBusinessRule(IBusinessRule rules...) {this.rules = rules;}
      bool Validate() {
           foreach(var r in rules) if(!r.Validate()) { return false; }
           return true;
      }
 }

 interface IPaymentProcessor
 {
    bool MakePayment(CreditCard card);
 }

 class CreditCardValidatorFactory
 {
    IBusinessRule createValidation(CreditCard card)
        {
           return new CompositeBusinessRule(
                 new Rule1(card.Name),
                 new Rule2(card.Month, card.Year)
           );
        }
 }

 interface IPaymentProcessor
 {
    bool MakePayment(CreditCard card);
 }

 class MyPaymentProcess : IPaymentProcessor
 {
    const CreditCardValidatorFactory validatorFactory;
        MyPaymentProcess(CreditCardValidatorFactory validatorFactory) { this.validatorFactory = validatorFactory;}

    public bool MakePayment(CreditCard card)
     {
        IBusinessRule validator = validatorFactory.createValidation(card);
        if(!validator.Validate()) { return false; }
        return true;
    }
 }

А следующим шагом я бы изменил IBusinessRule чтобы они ещё репортили ошибку c подробностями что случилось, а не просто true/false.

ЗЫЖ Ninject — фтопку, как и все IoC-фреймворки.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Отредактировано 07.11.2016 11:32 · . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.