Klasa FilterStrategy powinna mieć jedną metodę:

- chackFilterForSpecification(Map<String, String> filter, FilterSpecification) - mapa filtrów i enum

-- pseudokod, ciała metody:

```

    chosenValidator = mapValidators.get(filterSpecification.getValidator())

    chosenValidator.assertFilter(filter)

```

 

Klasy rozszerzające FilterParametersValidator powinny zostać oznaczone, odpowiednimi nazwali, występującymi w nowo napisanym Enumie, do poprawnego działania:

@Component("nazwaKlasy"):

- @Component("forAssertValidator")

- @component("forExpensesValidator")

 

po zastosowaniu zmian, będzie można dokonać zmiany w Klasie abstrakcyjnej FilterRange, pseudokod (jeśli występuje w tej klasie), z:

```

    if ("ExpensesFilter".equals(getFilterName())) expensesFilterParametersValidator.assertFilter(filter)

    if ("AssetsFilter".equals(getFilterName())) assetsFilterParametersValidator.assertFilter(filter)

```

 

na:

```

if ("ExpensesFilter".equals(getFilterName()))

                           filterStrategy.checkFilterForSpecification(filter, FilterSpecification.FOR_EXPENSES)

if ("AssetsFilter".equals(getFilterName()))

                           filterStrategy.checkFilterForSpecification(filter, FilterSpecification.FOR_ASSETS)

```

 

HINT: kod podany wyżej powinien snajdować się w Klasie FilterRange i metodzie getAllByFilter - metoda ta jest wywoływana przez AssetsService i ExpensesService

 

HINT: po zastosowaniu strategii, kalsę FilterStrategy, klasa abstrakcyjna FilterParametersValidator i jej implementacje możesz przeniść do nowego pakietu: validators.filters, czyli sprawdzenie (assercja) powinno być wykonywane tylko w jenym miejscu: sprawdź czy metoda assertFilter z klasy FilterParametersValidator jest wywoływana tylko w jednym miejscu.

 

HINT: po zastosowaniu strategii, i przeniesieniu klas do nowego pakietu, klasa abstrakcyjna FilterParametersValidator i jej implementacje mogą mieć dostęp pakietowy - brak modyfikatora dostępu

Po tych zmianach, wszystko powinno działać poprawnie, a testy powinny być Zielone - nie zachodzi tu potrzeba ingerencji w testy

13 Strategia DesignPattern Hermetyzacja Filtrów

02 marca 2024

Robert Szczygielski Dice Dev. Polityka Prywatności i Regulamin Szkoleń Online

Strona www stworzona w kreatorze WebWave.