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
Robert Szczygielski Dice Dev. Polityka Prywatności i Regulamin Szkoleń Online
Strona www stworzona w kreatorze WebWave.