====== Domácí úkol 3 ======
//Tento domácí úkol se týká témat: UML, návrhový vzor Facade, Strategy a správný návrh aplikace..//
===== Zadání =====
Máte zadanou aplikaci, která dodržuje vícevrstevnatou architekturu. Je poměrně jednoduchá viz UML diagram níže:
{{ :courses:b6b36omo:hw3omo.png?500 |}}
Rozdělení balíčků:
* model - datové objekty
* repository - crud operace pro model balíček
* services - logika aplikace
* strategy - využití strategy
* facade - facade pro centrální bod pro aplikaci
* dto - transformovaný objekt - například pro FE
Z diagramu je vidět, že se nejedná o čisté řešení, ale aplikace je připravena na migraci do microservice architektury. Proto entity neobsahuji vztahy na ostatni entity (s vyjimkou Address). Jedná se tedy o rozdělení na 3 domény a to Book, Author, Library.
Zlepšete agregaci dat. Jedná se o velmi částý problém na projektech. Vidíte situaci na projektu, že některé metody jsou rozsáhlé, nepřehledné. Je zde hodně logiky na jednom místě. Špatně se debuguje. Rozšíření je hodně náročné.
Je potřeba takové metody dekomponovat. Zde se velmi hodí použít zavedená pravidla.
Využijte facade design pattern pro oddělení logiky kódu od spojování dat do složitější entity.
1/ Využijte pattern Facade pro skládání dat pro složitější objekty.
Jedná se o metodu getByBookId v BookFacadeImpl. Tato metoda ma vrátit knížku (objekt BookDto) - obsahuje název knížky,knihovny a autora
2/ Využijte pattern Strategy
Většinou se tento pattern využívá pro redukci if příkazů.
V kódu často bývá spoustu if příkazů, které při zpětné úpravě kódu budou dělat problémy (většinou je potřeba je všechny projít a upravit).
Programátor bude muset upravovat podmínky na více místech v aplikaci. - rozhodně nechceme.
V naši aplikaci tento pattern využijeme pro jednotné místo pro funkcionalitu.
Použijeme strategy na updateBook v service. Budou existovat 2 strategie:
* SimpleUpdate
-update - najde objekt a udela aktualizaci
* Unordered List ItemImutableStrategy (link zde: https://www.baeldung.com/java-immutable-object)
-update - vytvorit novy objekt ze stareho objektu a novych dat, které se měli aktualizovat
Proč použít strategy a ne například State? Jaký je rozdíl implementační?
Odevzdani do brute
Sablona pro domácí úkol: {{ :courses:b6b36omo:omo-hw3-for-students.zip |}}
odevzdavaji se soubory:
BookServiceImpl
BookStrategy
ImutableBookStrategy
SimpleStrategy
FacadeImpl
Dodržujte pojmenování tříd, které jsou v projektu