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:

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.

Facade

  1. Implementujte metody getByBookId v BookFacadeImpl

Metoda má vrátit objekt BookDto

Metoda nebude úplně jednoduchá kvůli servisní architektuře.

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

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. - a to rozhodně nechceme.

  1. Implementujte metodu update definovanou v interfacu BookStrategy.java
  2. Metoda by měla příjmat jako atribut pouze daný objekt knihy (Book)
  3. Návratová hodnota je Book
Při implementaci se zamyslete, jestli nemůžete využít něco z toho, co jste už implementovali.

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:

  • SimpleBookStrategy - jednoduchý update, který najde objekt, a udělá aktualizaci
  • ImutableBookStrategy - “update”, který přidá nový objekt ze starého objektu (a nových dat, které se měli aktualizovat). Při vytváření nezapomeňte zvýšit ID nového objektu o 1 oproti původnímu objektu.
Pokud nevíte, co znamená imutable objekt, tak koukněte sem: (link zde: https://www.baeldung.com/java-immutable-object)

Odevzdání do brute

Šablona pro domácí úkol: omo-hw3-students_1.zip

Odevzdávají se soubory:

  • BookServiceImpl.java
  • BookStrategy.java
  • ImutableBookStrategy.java
  • SimpleBookStrategy.java
  • BookFacade.java
  • BookFacadeImpl.java
Dodržujte pojmenování tříd, které jsou v projektu. Konstruktor BookFacadeImpl(BookServiceImpl bookService, AuthorServiceImpl authorService, LibraryServiceImpl libraryService) prosím neimplementujte. V testech se předpokládá, že je konstruktor bezparametrický.

Malá rada na závěr:

Možná vám pomůže následující diagram, kde jsou znázorněné vazby.

courses/b6b36omo/hw/03.txt · Last modified: 2025/09/15 07:52 by jarymiro