Návrhové vzory

MVOP WBF

Bc. Matěj Cajthaml — SSPŠ

©

Rozdělení aplikací

Rozdělení aplikací

  • frontend
  • backend
  • databáze

Jaké data z backendu by měl frontend ukládat (požadovat o ně)?

Má frontend ukládat veškeré data v cache (localStorage)?

Je vhodné, aby si frontend dovymýšlel data, která by měl backend poskytnout?

Vrstvení

Vrstvení

  • způsob, jak rozdělit aplikaci do logických částí
  • každá část má svůj vlastní úkol
    • komunikace se serverem
    • zpracování dat
    • uchovávání dat
    • akce uživatele
    • zobrazování šablon

Co jsou výhody a nevýhody rozdělení aplikace do logických částí?

Jak vytvářet logické části aplikace ve Vue?

Návrh těchto vrstev si ukážeme později.

Ukládání dat ze serveru

Ukládání dat ze serveru

  • data ze serveru by měli být DTO
  • DTO = Data Transfer Object
  • objekt, který představuje data ze serveru v surovém stavu
  • DTO se převádí na objekt, který je vhodný pro frontend
  • máme k dispozici datové typy a metody, se kterými můžeme pracovat

Data, které se předávájí (DTO) se tedy přímo neukládají. Proč?

Návrhové vzory

Návrhové vzory

  • způsob řešení určitého problému
  • pro specifické situace
  • řadí se do kategorií

Kategorie

  • Creational — vytváření objektů
  • Structural — struktura objektů
  • Behavioral — chování objektů

Creational

  • řeší problémy s vytvářením objektů
  • popisují jak se objekty vytvářejí a vybírají

Structural

  • řeší problémy s upsořádáním objektů
  • zpřehledňují strukturu objektů

Behavioral

  • řeší problémy s chováním objektů
  • popisují jak se objekty komunikují
  • dědičnost

Jsou návrhové vzory framework či knihovna?

Návrhové vzory nejsou vhodné pro všechny situace a problémy.

Cílem hodin je představit nejdůležitější návrhové vzory.

Singleton

  • creational
  • umožňuje vytvořit pouze jednu instanci objektu
  • přístup k instanci je zajištěn pomocí statické metody/vlastnosti

Výhody a nevýhody singletonu?

Kde byste singleton použili?

Command

  • behavioral
  • umožňuje zabalit požadavek do objektu
  • požadavek je pak možné uložit, zaslat, zrušit, opakovat
  • požadavek je možné zpracovat pomocí jiného objektu

Výhody a nevýhody commandu?

Kde byste command použili?

Observer

  • behavioral
  • umožňuje objektu sledovat změny jiného objektu
  • objekt je možné přidat, odebrat, změnit
  • objekt je možné zpracovat pomocí jiného objektu

Výhody a nevýhody observeru?

Kde byste observer použili?

Facade

  • structural
  • umožňuje zjednodušit přístup k objektům
  • místo přístupu k více objektům je možné přistoupit k jednomu
  • sjednocuje volání metod

Výhody a nevýhody facade?

Kde byste facade použili?

Refactoring

Refactoring

  • proces zlepšování kódu
  • zlepšuje čitelnost, přehlednost, udržitelnost
  • zvyšuje kvalitu kódu
  • zvyšuje jeho přehlednost
  • zvyšuje jeho udržitelnost

Používáme při refactoringu návrhové vzory?

https://refactoring.guru

Dependency injection

  • návrhový vzor
  • řeší problémy závislostí
  • umožňuje snadnější testování, nahrazování a rozšiřování

Služby

  • služba je objekt, který poskytuje určitou funkcionalitu
  • služba je možné použít v jiném objektu či službě
  • v podstatě každý objekt může být službou
  • registrují se
  • získávají se z registru

Důvody

  • služby, které jsou závislé na jiných službách, které závisí na něčem jiném
  • nechceme ručně předávat závislosti

  • inicializování stejných závislostí vícekrát → neefektivní
  • opakování kódu
  • upravení závilostí vede k úpravě všech služeb

Co nechceme

S DI

Pokročilé DI

  • nutné použít nějaký framework
  • většinou se používá v kombinaci s dalšími návrhovými vzory
  • nutné nastavovat závislosti a další konfiguraci

Další vzory

Práce

Zjistěte si informace o následujících návrhových vzorech. Přemýšlejte nad jejich použitím.

  • template view
  • factory
  • builder
  • proxy
  • adapter
  • bridge

Děkuji za pozornost!

  • matej.cajthaml@ssps.cz
  • https://ssps.cajthaml.eu/