V každém projektu se snažím přidávat do entit uložených v databázi alespoň informaci o tom kdo a kdy daný objekt vložil do databáze. Specifikace to často nezmiňuje vyjma případů, kdy entita nevyžaduje nějaký sofistikovanější způsob sledování historie změn. Ze zkušenosti se mi však již několikrát vyplatilo jednoduchou audit informaci v databázi mít.
Řešení by mělo splňovat několik požadavků:
- Nemělo by žádným způsobem přidávat práci programátorovi řešícímu business logiku. Tedy vyloučeno je explicitní volání metod, nastavování atributů objektu atd. Z tohoto pohledu by mělo být vše naprosto transparentní.
- Přidaná informace musí obsahovat informace o autorovi záznamu. Pro portálovou webovou aplikaci se může například jednat o přihlášeného uživatele. V případě volání stejné logiky ze skriptu dávkově by se pak mohlo jednat o login name uživatele na linuxovém serveru atd. Z toho důvodu odpadá řešení pomocí stored procedure na databázovém serveru. Respektive jsem nepřišel na žádné univerzální a jednoduché řešení. Pokud o něčem víte pak neváhejte komentovat. Rád se něčemu přiučím.
Jaké jsou tedy možnosti? Pokud je projekt řešen v Javě a jako ORM je použilo Hibernate pak se přímo nabízí použití implementace rozhraní org.hibernate.Interceptor (javadoc). Pro poslední dva projekty, kterých jsem se účastnil bylo toto řešení uspokojivě použito a slouží dobře. Má však z mého úhlu pohledu několik nevýhod.
Continue reading…

© 2012 Martin Podolinský. All Rights Reserved.