W części drugie odwdrócenie zależności poprzez klasę abstrakcyjną. W projektach nie stosuje tej metody, wydaje mi się jednak, że jeżeli istnieje taki sposób to można go pokazać. Zaprezentowany kod może się nie podobać ale jest to tylko przykład zastosowania klasy abstrakcyjnej, a nie docelowy kod.

Przykłady w kodzie z bazującym na poprzednim artykule.

Dependency Inversion – abstract class

Wyjaśnienie kodu:

Klasa SimpleAddingParticipant służy do uproszczonego dodania nowego zawodnika, minimalna wymagana ilość informacji tj imię, nazwisko, email i dystans. W bazie ustawiona jest unikalność na imię, nazwisko i email.

Klasa SimpleAddingParticipant wykorzystuję metody z trzech interfejsów:

  • INewRecord – metoda createNewRecord – tworzy nowy obiekt klasy Kartoteka2,
  • IAddZawodnik – metoda addParticipantWithoutTimeRegistrationVerification – wywołuje procedure składowaną, która dodaje nowego zawodnika,
  • IPlayerVerification – metoda searchPlayer – wyszukuje czy dany zawodnik jest już zarejestrowany (zapisany w bazie),
  • metoda validateFormatEmail – sprawdza formę zapisu adresu email

W klasie abstrakcyjnej użyłem interfejsów w konstruktorze.

Deklaracja klasy abstrakcyjnej

Definicja klasy dziedziczącej po klasie abstrakcyjnej

Wywołanie w kontrolerze

Krótkie sprostowanie klasa abstrakcyjna ma konstruktor ale nie mogę utworzyć obiektu klasy abstrakcyjnej. Za pomocą konstruktora mogę nadać wartości właściwością tejże klasy.