Unit of Work vzor z P of EAA (Fowler) 1
Unit of Work – úvod Problém Příklad: ORM Jak na to? Jak efektivně udržovat konzistentní stav lokálních se vzdálenými objekty? Příklad: ORM Kdy posílat změněný stav doménového objektu? Kdy ho mazat apod.. Jak na to? Udržovat si seznam lokálních objektů, u kterých byl změněn stav během jedné business transakce a pak vše hromadně vyřešit Manager 2
Unit of Work – příklad 3
Unit of Work – účastníci Klient Vyvolá změnu doménového objektu Doménový objekt Registruje se u Unit of Work při vzniku Změny hlásí Unit of Work Unit of Work objekt Uchovává seznam dotčených objektů Při ukončení business transakce se postará o dávkové odeslání změn Postará se o problémy s referenční integritou, pokud se o ně neumí postarat vzdálený systém (databáze) Zajistí pořadí změn 4
Unit of Work – implementace Implementujeme metody Unit of Work na registrování doménových objektů 5
Unit of Work – implementace Potřebujeme zpřístupnit Unit of Work všem doménovým objektům Nemá smsl dávat ho všem jako argument Jelikož všechny operace jedné business transakce probíhají z jednoho vlákna, můžeme objekt Unit of Work svázat s daným vláknem Pokud již existuje objekt, který uchovává session objekty, můžeme Unit of Work přiřadit sem 6
Unit of Work – implementace Předkovi doménových objektů nastavíme metody, kterými registruje změny k Unit of Work 7
Unit of Work – implementace U operací doménových objektů vyvoláme registraci změny 8
Unit of Work – implementace Zajištění vyvolání commitu změn po dokončení business transakce Automaticky (implicitně) Manuálně (explicitně) 9
Unit of Work – použití Ulehčení práce při používání databáze pomocí ORM Lze použít i u jiných systémů využívajících transakce 10
Unit of Work – shrnutí Zpřehledňuje kód Zjednodušuje práci s odesíláním změn do databáze Může řešit problémy s referenční integritou Související vzory Singleton 11
Unit of Work – shrnutí Prevence 12