Шаблоны дизайна фильтров - PullRequest
       3

Шаблоны дизайна фильтров

0 голосов
/ 29 августа 2018

Мне действительно нравятся «фильтры» в ASP.MVC. Они блестящие.

Я бы хотел использовать некий шаблон проектирования фильтров для своей бизнес-логики.

Рассмотрим следующее:

var shippingFilterCost = {
  "Name": "CalculateShippingCostsFilter",
  "InjectedServices": "product, shoppingBasket, CalculateProductShipping",
  "MainMethod": function (product, shoppingBasket,CalculateProductShipping) {
    var shippingCost = CalculateProductShipping(product.weight, shoppingBasket.locationToShipTo);
    product.ShippingCost = shippingCost;
    return product;
  }
}


var checkIfBuyerHasAVouche = {
  "Name": "CheckVoucher",
  "InjectedServices": "product, shoppingBasket, CheckVoucherValid,CalculateVoucher",
  "EntryCondition": function (product, shoppingBasket, CheckVoucherValid, CalculateVoucher) {
    var isVoucherValid = CheckVoucherValid(shoppingBasket.voucherCode);   
    return isVoucherValid;
    // we only go to the 'MainMethod' if entryCondition returns true;
  },
  "MainMethod": function (product, shoppingBasket, CheckVoucherValid, CalculateVoucher) {
    var voucherPrice = CalculateVoucher(shoppingBasket.voucherCode);
    product.voucherPriceReduction = voucherPrice;
    return product;
  }
}

Таким образом, у нас будет базовый продукт, и этот базовый продукт пройдет через те 2 фильтра, которые добавят «информацию к нему».

Один фильтр рассчитывает стоимость доставки, а другой - ваучер.

Преимущества:

1) По ссылкам мы можем легко увидеть, какие «службы» используются.

2) Мы можем легко отследить, какой метод легко изменяет какое свойство, потому что

3) Сервисы - это просто чистые методы, которые что-то возвращают.

4) Все мутации централизованы внутри основного метода

5) У нас также есть метод EntryCondition, который мы можем отделить и посмотреть, какие фильтры работают, а какие нет.

Я не уверен, как лучше объяснить, что здесь происходит. Очевидно, что эта логика очень проста, но если бы у меня было несколько поставщиков, типов клиентов и т. Д., У каждого из которых была своя логика, мы могли бы увидеть, как этот декларативный способ может помочь мне.

Если у вас есть идея, как я могу объяснить это лучше, отредактируйте мой пост.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...