+ All Categories
Home > Documents > Webové aplikace - MENDELUlysek/data/wa/prezentace02.pdf · Frameworky a návrhové vzory strana 7....

Webové aplikace - MENDELUlysek/data/wa/prezentace02.pdf · Frameworky a návrhové vzory strana 7....

Date post: 17-Jan-2020
Category:
Upload: others
View: 2 times
Download: 0 times
Share this document with a friend
27
Webové aplikace PHP OOP, PHP a databáze, migrace DB, ORM, šablony , MVC/MVP, PHP frameworky Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 26. 2. 2019
Transcript
Page 1: Webové aplikace - MENDELUlysek/data/wa/prezentace02.pdf · Frameworky a návrhové vzory strana 7. Otázka k zamyšlení: • Dokázali byste napsat server-klient aplikaci s GUI

Webové aplikace

PHP OOP, PHP a databáze, migrace DB,

ORM, šablony, MVC/MVP, PHP frameworky

Připravil: Ing. Jiří Lýsek, Ph.D.

Verze: 26. 2. 2019

Page 2: Webové aplikace - MENDELUlysek/data/wa/prezentace02.pdf · Frameworky a návrhové vzory strana 7. Otázka k zamyšlení: • Dokázali byste napsat server-klient aplikaci s GUI

PHP

• skriptovací jazyk

• dynamicky typovaný

• interpret skriptů

• spouští se jako modul v Apache HTTP

server

– při instalaci se registruje koncovka php k

interpretu v httpd.conf

strana 2

Page 3: Webové aplikace - MENDELUlysek/data/wa/prezentace02.pdf · Frameworky a návrhové vzory strana 7. Otázka k zamyšlení: • Dokázali byste napsat server-klient aplikaci s GUI

PHP objekty

• Viditelnost metod a vlastností

– public, private, protected

• Přetěžování metod

• Dědičnost

– jediný předchůdce

• Interfaces

• Traits

• Statické metody

strana 3

Page 4: Webové aplikace - MENDELUlysek/data/wa/prezentace02.pdf · Frameworky a návrhové vzory strana 7. Otázka k zamyšlení: • Dokázali byste napsat server-klient aplikaci s GUI

PHP objekty - magické metody

• __construct()

• __destruct()

• __get($n)

• __set($n, $v)

• __call($n)

• __toString()

• __...

strana 4

$this->cokoliv = …;

zavolá __set("cokoliv")

$objekt = new …;

echo $objekt;

Page 5: Webové aplikace - MENDELUlysek/data/wa/prezentace02.pdf · Frameworky a návrhové vzory strana 7. Otázka k zamyšlení: • Dokázali byste napsat server-klient aplikaci s GUI

PHP jmenné prostory

• Mohou obsahovat

– třídy

– interface

– trait

– funkce

– konstanty

strana 5

Page 6: Webové aplikace - MENDELUlysek/data/wa/prezentace02.pdf · Frameworky a návrhové vzory strana 7. Otázka k zamyšlení: • Dokázali byste napsat server-klient aplikaci s GUI

PHP 7.x

• typ. kontrola pro skalární typy (volitelně)

• operátor ?? pro null

– echo $a ?? "..."

• operátor <=> pro řazení (vrací 0, -1, 1)

– $v = 1 <=> 2; … -1

• anonymní třídy

• zrušeno rozhraní MySQL (MySQLi, PDO)

• rychlost!

strana 6

Ještě existuje

operátor ?:

Page 7: Webové aplikace - MENDELUlysek/data/wa/prezentace02.pdf · Frameworky a návrhové vzory strana 7. Otázka k zamyšlení: • Dokázali byste napsat server-klient aplikaci s GUI

Frameworky a návrhové vzory

strana 7

Page 8: Webové aplikace - MENDELUlysek/data/wa/prezentace02.pdf · Frameworky a návrhové vzory strana 7. Otázka k zamyšlení: • Dokázali byste napsat server-klient aplikaci s GUI

Otázka k zamyšlení:

• Dokázali byste napsat server-klient

aplikaci s GUI a databází v relativně

krátkém čase v jiném než webovém

prostředí?

– asi ne…

– v PHP to umí kde kdo (i děti na ZŠ)

• mohou to dělat dobře?

• jak to dělat správně?

• jak se neztratit v kódu?

strana 8

jakou?

Page 9: Webové aplikace - MENDELUlysek/data/wa/prezentace02.pdf · Frameworky a návrhové vzory strana 7. Otázka k zamyšlení: • Dokázali byste napsat server-klient aplikaci s GUI

Tvorba software a návrh

• Dobrý návrh aplikací je důležitý pro

větší projekty

– udržovatelnost

– testovatelnost

– dodržet termín dodání

– vlastní psaní kódu je dílčí část procesu

• v PHP se píšou aplikace malé i velké

– je snadné začít

– může být těžké růst

strana 9

volte správné nástroje

pro vaše cíle

aby kód mohl upravovat i někdo

jiný, aby mohlo spolupracovat víc

vývojářů po delší čas

Page 10: Webové aplikace - MENDELUlysek/data/wa/prezentace02.pdf · Frameworky a návrhové vzory strana 7. Otázka k zamyšlení: • Dokázali byste napsat server-klient aplikaci s GUI

Návrhový vzor

• znovupoužitelné řešení nějakého

problému

strana 10

Programování Elektrotechnika Strojírenství

Základní jednotka Řádek kódu Součástka

(kondenzátor,

odpor, dioda, …)

Díl (hřídel, ozubené

kolo, šroubek, …)

Celek Funkce, třída Elektrický obvod

(zapojené

součástky)

Sestava (převod,

sešroubované díly,

ložisko, …)

Funkční celek Vrstva aplikace,

knihovna

Osazený plošný

spoj (zesilovač,

zdroj, trafo, …)

Spojka, motor,

převodovka,

diferenciál…

Produkt Software El. zařízení Stroj

Page 11: Webové aplikace - MENDELUlysek/data/wa/prezentace02.pdf · Frameworky a návrhové vzory strana 7. Otázka k zamyšlení: • Dokázali byste napsat server-klient aplikaci s GUI

strana 11

Page 12: Webové aplikace - MENDELUlysek/data/wa/prezentace02.pdf · Frameworky a návrhové vzory strana 7. Otázka k zamyšlení: • Dokázali byste napsat server-klient aplikaci s GUI

Ověřené postupy – best practices

• Cesta k PHP frameworku vede přes

použití a pochopení návrhových vzorů

a ověřených postupů

– Migrace a seedování DB

– ORM (AR, Data mapper)

– Šablonovací systémy

– …

strana 12

Framework je

sestaven z

těchto bloků

Page 13: Webové aplikace - MENDELUlysek/data/wa/prezentace02.pdf · Frameworky a návrhové vzory strana 7. Otázka k zamyšlení: • Dokázali byste napsat server-klient aplikaci s GUI

MVC / MVP

strana 13

nebo

presenter…?

Page 14: Webové aplikace - MENDELUlysek/data/wa/prezentace02.pdf · Frameworky a návrhové vzory strana 7. Otázka k zamyšlení: • Dokázali byste napsat server-klient aplikaci s GUI

Framework

strana 14

Framework

Šablony

(Latte, Twig, Smarty,

Blade, …)

ORM systém

(Doctrine, Eloquent,

Propel, RedBean,…)

MVC/MVP

DB migrace

CLI

Lokalizace DB seedyFormuláře

Maily Autentizace Autorizace

společný název pro

mnoho nástrojů

Page 15: Webové aplikace - MENDELUlysek/data/wa/prezentace02.pdf · Frameworky a návrhové vzory strana 7. Otázka k zamyšlení: • Dokázali byste napsat server-klient aplikaci s GUI

PHP Frameworky

• ucelené systémy určující způsob

práce

– knihovny

– architektura aplikace

strana 15

Page 16: Webové aplikace - MENDELUlysek/data/wa/prezentace02.pdf · Frameworky a návrhové vzory strana 7. Otázka k zamyšlení: • Dokázali byste napsat server-klient aplikaci s GUI

Který si vybrat

• moderní, bezpečný a vyvíjený

– věnujte pozornost délce podpory vybrané

verze

• vhodný pro můj cíl

• s dobrou dokumentací

• používající nástroje, které znám

– Composer, Git, PhpUnit, … + automatizace

• s velkou (aktivní) komunitou

strana 16

Page 17: Webové aplikace - MENDELUlysek/data/wa/prezentace02.pdf · Frameworky a návrhové vzory strana 7. Otázka k zamyšlení: • Dokázali byste napsat server-klient aplikaci s GUI

PHP FIG

• Framework Interop Group

– skupina vývojářů frameworků

• PSR doporučení

• http://www.php-fig.org

strana 17

tzn. že to není

závazné

Page 18: Webové aplikace - MENDELUlysek/data/wa/prezentace02.pdf · Frameworky a návrhové vzory strana 7. Otázka k zamyšlení: • Dokázali byste napsat server-klient aplikaci s GUI

Framework VS knihovna

• Inversion of control

– Framework řídí vás, knihovnu řídíte vy

• Framework = ucelená sada myšlenek

a postupů složená z knihoven a

sladěná tak, aby co nejlépe plnila svůj

účel

strana 18

Page 19: Webové aplikace - MENDELUlysek/data/wa/prezentace02.pdf · Frameworky a návrhové vzory strana 7. Otázka k zamyšlení: • Dokázali byste napsat server-klient aplikaci s GUI

PHP aplikace a databáze

• DB struktura je součástí aplikace

– chybějící sloupec způsobí kolaps

aplikace

• problém jsou změny struktury při

změnách aplikace

– kdo mi řekne, že kolega udělal změnu?

– jak udržet strukturu na všech strojích, kde

aplikace běží stejnou?

strana 19

můžu si zapisovat

ručně změny?

Page 20: Webové aplikace - MENDELUlysek/data/wa/prezentace02.pdf · Frameworky a návrhové vzory strana 7. Otázka k zamyšlení: • Dokázali byste napsat server-klient aplikaci s GUI

Migrace DB

• systém pro procedurální tvorbu DB

struktury

– výhodné pro týmy

– každá změna DB je realizována jako

skript

– podpora rollback (undo)

– např. systém Phinx nebo součástí

frameworku Laravel

– vhodné i pro různé DB systémy

strana 20

Page 21: Webové aplikace - MENDELUlysek/data/wa/prezentace02.pdf · Frameworky a návrhové vzory strana 7. Otázka k zamyšlení: • Dokázali byste napsat server-klient aplikaci s GUI

PHP aplikace a databáze

• Psaní SQL dotazů je otravné a časem

stejné

– DELETE, INSERT, UPDATE

– SELECT…?

• Entity někdy vyžadují přidanou logiku.

strana 21

Page 22: Webové aplikace - MENDELUlysek/data/wa/prezentace02.pdf · Frameworky a návrhové vzory strana 7. Otázka k zamyšlení: • Dokázali byste napsat server-klient aplikaci s GUI

ORM

• Object Relational Mapping

– mapuje databázi na objekty

– využívá cizí klíče nebo konfigurační

soubory pro relace

• Vzory (design pattern):

– Active record

– Data mapper

• Generátory kódu

strana 22

Page 23: Webové aplikace - MENDELUlysek/data/wa/prezentace02.pdf · Frameworky a návrhové vzory strana 7. Otázka k zamyšlení: • Dokázali byste napsat server-klient aplikaci s GUI

ORM výhody a nevýhody

• výhody

– není nutné psát jednoduché SQL

– je nutné upravit strukturu DB

• některé ORM např. nepodporují kompozitní

klíče

• nevýhody

– složitější dotazy a spojení tabulek se

někdy realizují složitě

– nová jiná "syntaxe"

strana 23

Page 24: Webové aplikace - MENDELUlysek/data/wa/prezentace02.pdf · Frameworky a návrhové vzory strana 7. Otázka k zamyšlení: • Dokázali byste napsat server-klient aplikaci s GUI

ORM

• Active record

– objekty si řeší práci s DB samy

– $obj->save(), $obj->delete();

• Data mapper

– práce s DB přes další objekt tzv.

"mapper"

– $mapr->save($obj), $mapr->delete($obj)

strana 24

Page 25: Webové aplikace - MENDELUlysek/data/wa/prezentace02.pdf · Frameworky a návrhové vzory strana 7. Otázka k zamyšlení: • Dokázali byste napsat server-klient aplikaci s GUI

Active record vs Data mapper

• Active record

– objekt obsahuje DB

metody jako

• insert

• delete

• update

• Data mapper

– entita neobsahuje

DB metody

– mapper může

pracovat nad

různými úložišti

strana 25

co dělat se

smazanou

instancí?

Mapper může

vrátit instanci

podle dat

Page 26: Webové aplikace - MENDELUlysek/data/wa/prezentace02.pdf · Frameworky a návrhové vzory strana 7. Otázka k zamyšlení: • Dokázali byste napsat server-klient aplikaci s GUI

Active record vs Data mapper

strana 26

složitější, ale

univerzálnější

Page 27: Webové aplikace - MENDELUlysek/data/wa/prezentace02.pdf · Frameworky a návrhové vzory strana 7. Otázka k zamyšlení: • Dokázali byste napsat server-klient aplikaci s GUI

Checkpoint

• Je MySQL/PostgreSQL součástí

serveru Apache nebo PHP?

• Je lepší používat jen knihovny nebo

jen framework?

• Jsou všechny frameworky stejné?

• Je ORM lepší než psaní SQL dotazů?

strana 27


Recommended