Ciele
- Vyskúšať implementáciu perzistencie bez použitia techník metaprogramovania.
- 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.