Rysunek 1. obrazuje wygląd wzoraca projektowego: Fabryka, i możliwe nazwy klas.

Rysunek 2. obrazuje wygląd wzoraca projektowego: Chain Of Responsibility, i możliwe sprawdzenia.

 

Zadanie ma na celu przeniesienie walidacji (sprawdzenia poprawności) filtrów, z klasy ExpensesService do Fabryki, która jest tworzona, zmiany powinny się odbywać w obrębie metody getFilteredExpenses i metod powiązanych (jeśli występują).

 

Metoda assertFilter powinna posiadać cztery sprawdzenia, dobrze będzie je rozdzielić na oddzielne metody, aby łatwiej czytać kod (Clean Code), przykładowe nazwy dla zobrazowania czytelności kodu:

- checkIfFromDateExistsToAndToDateIsMissing

- checkIfToDateExistsAndToDateIsMissing

- checkIfMonthExistsAndYearIsMissing

- checkIfYearExistsAndMonthIsMissing

 

Konstrukcja każdej z powyższych metod będzie podobna, pseudokod:

```

    void checkIf_And_IsMissing(all necessary parameters) {

        if (key in filters form parameters are missing)     

            throwException(FilterExpensesParameterEnum.correct_value_from_Enum, next parameters - if necessary)

          // to jest metoda abstrakcyjna w klasie 

    }

 

```

Pamiętaj, że klasa ExpensesFilterParametersValidator powinna zostać oznaczona adnotacją @Component, to prawidłowego działania.

 

Po zmianach, w klasie ExpensesService trzeba wstrzyknąć ExpensesFilterParametersValidator i wykorzystać metodę, która jest dostarczona wraz z tą klasą: assertFilter

 

Uruchom testy, jeśli występują błędy (nie muszą występować) - popraw je.

 

HINT: Możesz w enumie ExpensesExceptionErrorMassage, dodać do metody getMessage parametr z nazwą pola, którego brakuje i zbudować String `"Missing: " + missingKey` - nie jest konieczne, jednak ułatwia czytanie kodu.

HINT: Nowo tworzone klasy możesz umieścić w nowym pakiecie filters: 'pl.dicedev.filters'

08 ChainOfResponsibility w Filtrowaniu Wydatków

02 marca 2024

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

Strona www stworzona w kreatorze WebWave.