Motivačný príklad

Ciele

  1. Vyskúšať implementáciu perzistencie bez použitia techník metaprogramovania.
  2. Pripraviť sa na riešenie zadaní z predmetu Metaprogramovanie.

Úvod

Prvá úloha slúži ako príprava pre vypracovanie zadania na tomto predmete. Na rozdiele od zadania, tu sa implementácia bude ručne vytvárať pre každú triedu dátového modelu. Neskôr v rámci zadania bude úlohou automatizovať tento proces – vytvoriť takú realizáciu, ktorá bude vedieť spracovať triedy dátového modelu bez potreby implementácie špecifických podporných tried.

Postup

Krok 1: Zoznámenie sa s projektom

Predstavte, že vyvíjate aplikáciu s dvoma triedami dátového modelu: Employee a Department. Aplikácia bude ukladať informácie o objektoch týchto tried do databázy SQLite. Na získavanie a ukladanie dát do databázy sa budu používať objekty implementujúce rozhranie PersistenceManager:

public interface PersistenceManager<T> {
    /**
     * Get specific object from database.
     *
     * @param id Identifier of the object
     * @return New object based on the database row, or empty if specified
     * identifier is not present in database.
     */
    Optional<T> get(long id);

    /**
     * Get all objects from the database.
     *
     * @return List of new object based on database contents.
     */
    List<T> getAll();

    /**
     * Save object state into database.
     * If object had <code>id</code> field different to zero then database
     * update would be performed, otherwise insert would be performed and
     * generated id would be stored in the <code>id</code> field.
     *
     * @param object Object to save.
     */
    void save(T object);
}

Úloha 1.1

Stiahnite si projekt s pripravenými doménovými triedami a sadou testov. Preskúmajte kód testov a požiadavky na triedy manažérov perzistencie, ktoré sú v nich implementované.

Krok 2: Implementácia

Pre každú triedu dátového modelu bude nutné implementovať vlastný PersistenceManager, ktorý bude implementovať špecifické operácie pre danú triedu.

Úloha 2.1

Implementujte triedy DepartmentManager a EmployeeManager. Využite pritom poskytnuté jednotkové testy.

Poznámka

Pri zadávaní dát do SQL požiadaviek odporúčam využiť triedu PreparedStatement.