Информация об изменениях

Сообщение Re: Фабрика объектов с разными конструкторами от 07.11.2016 11:28

Изменено 07.11.2016 11:32 ·

Здравствуйте, 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.
Re: Фабрика объектов с разными конструкторами
Здравствуйте, 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-фреймворки.