Prečo je písanie dlhodobo udržiavateľných testov dôležitejšie ako písanie udržiavateľného kódu? A ako vlastne na to? Prezentácia zľahka nadväzuje na predchádzájúcu prednášku (http://www.slideshare.net/petersimun/presentation-11002440) a popisuje odporúčané postupy a praktické ukážky toho, ako automatizovane testujeme interaktívne webové aplikácie, aké neštastia nás pritom postihli a ako sme z toho vykľučkovali.
Clean Code / ako nevariť objektové špagety - Martin Razus WEBtlak
O tom, ako sa nestratiť vo vlastnom kóde alebo ako neprísť o priateľov keď čítajú vaše zdrojáky. Aj v dobe objektov, tried a interfaceov je veľmi ľahké navariť z kódu kvalitné špagety. Zopár praktických tipov ako tomu predchádzať.
Vývoju softwaru sa venuje profesne cez 10 rokov, pracoval na mnohých pozíciách vo firmách ako ui42 či Piano Media. Momentálne vedie malú softwarovú firmu so zameraním na webový vývoj. V Prešove organizuje stretnutie WebElement (podobné WEBtlak-u) a podieľa sa na coworkingu Eastcubator Prešov. Rád hľadá jednoduché odpovede na jednoduché otázky a tým zložitým sa radšej vyhýba :)
Session zo slovenského Drupal Campu 2013, kde som rozprával o princípoch a výhodách Objektovo Orientovaného Programovania, ktoré môžeme využiť aj v Drupale a bez toho, aby sme narúšali jeho interné princípy (Slovenská verzia).
-----
Session from Slovak DrupalCamp 2013, where I spoke about principals and advantages of Object Oriented Programming, which we can also us in Drupal development and without breaking it's internal principles (Slovak version).
Session zo slovenského Drupal Campu 2013, kde som rozprával o princípoch a výhodách Objektovo Orientovaného Programovania, ktoré môžeme využiť aj v Drupale a bez toho, aby sme narúšali jeho interné princípy (Slovenská verzia).
-----
Session from Slovak DrupalCamp 2013, where I spoke about principals and advantages of Object Oriented Programming, which we can also us in Drupal development and without breaking it's internal principles (Slovak version).
Prečo je písanie dlhodobo udržiavateľných testov dôležitejšie ako písanie udržiavateľného kódu? A ako vlastne na to? Prezentácia zľahka nadväzuje na predchádzájúcu prednášku (http://www.slideshare.net/petersimun/presentation-11002440) a popisuje odporúčané postupy a praktické ukážky toho, ako automatizovane testujeme interaktívne webové aplikácie, aké neštastia nás pritom postihli a ako sme z toho vykľučkovali.
Clean Code / ako nevariť objektové špagety - Martin Razus WEBtlak
O tom, ako sa nestratiť vo vlastnom kóde alebo ako neprísť o priateľov keď čítajú vaše zdrojáky. Aj v dobe objektov, tried a interfaceov je veľmi ľahké navariť z kódu kvalitné špagety. Zopár praktických tipov ako tomu predchádzať.
Vývoju softwaru sa venuje profesne cez 10 rokov, pracoval na mnohých pozíciách vo firmách ako ui42 či Piano Media. Momentálne vedie malú softwarovú firmu so zameraním na webový vývoj. V Prešove organizuje stretnutie WebElement (podobné WEBtlak-u) a podieľa sa na coworkingu Eastcubator Prešov. Rád hľadá jednoduché odpovede na jednoduché otázky a tým zložitým sa radšej vyhýba :)
Session zo slovenského Drupal Campu 2013, kde som rozprával o princípoch a výhodách Objektovo Orientovaného Programovania, ktoré môžeme využiť aj v Drupale a bez toho, aby sme narúšali jeho interné princípy (Slovenská verzia).
-----
Session from Slovak DrupalCamp 2013, where I spoke about principals and advantages of Object Oriented Programming, which we can also us in Drupal development and without breaking it's internal principles (Slovak version).
Session zo slovenského Drupal Campu 2013, kde som rozprával o princípoch a výhodách Objektovo Orientovaného Programovania, ktoré môžeme využiť aj v Drupale a bez toho, aby sme narúšali jeho interné princípy (Slovenská verzia).
-----
Session from Slovak DrupalCamp 2013, where I spoke about principals and advantages of Object Oriented Programming, which we can also us in Drupal development and without breaking it's internal principles (Slovak version).
Junior Internet 2015 - PHP moderne a správneTomáš Tatarko
Prehľad noviniek v posledných verziách PHP a drobné načrtnutie budúcnosti. Okrem toho ešte predstavený Composer a ekosystém okolo neho.
Links:
HHVM/HACK http://hacklang.org
PHP7: https://wiki.php.net/rfc/php7timeline
Github: https://github.com
Packagist: https://packagist.org
PSR: http://www.php-fig.org/psr/psr-2/
Základný prehľad o technológii Google App Engine a možnosti napojenia Flash Builderu na BlazeDS, pomocou ktorého je možné priamo generovať kód zo serverového API. Výrazné zjednodušenie práce. Nasleduje diskusia o kontinuálnej integrácii a Hudson CI.
Zváračský kurz na BlazeDS a Google App EngineJuraj Michálek
Základný prehľad o technológii Google App Engine a možnosti napojenia Flash Builderu na BlazeDS, pomocou ktorého je možné priamo generovať kód zo serverového API. Výrazné zjednodušenie práce.
Junior Internet 2015 - PHP moderne a správneTomáš Tatarko
Prehľad noviniek v posledných verziách PHP a drobné načrtnutie budúcnosti. Okrem toho ešte predstavený Composer a ekosystém okolo neho.
Links:
HHVM/HACK http://hacklang.org
PHP7: https://wiki.php.net/rfc/php7timeline
Github: https://github.com
Packagist: https://packagist.org
PSR: http://www.php-fig.org/psr/psr-2/
Základný prehľad o technológii Google App Engine a možnosti napojenia Flash Builderu na BlazeDS, pomocou ktorého je možné priamo generovať kód zo serverového API. Výrazné zjednodušenie práce. Nasleduje diskusia o kontinuálnej integrácii a Hudson CI.
Zváračský kurz na BlazeDS a Google App EngineJuraj Michálek
Základný prehľad o technológii Google App Engine a možnosti napojenia Flash Builderu na BlazeDS, pomocou ktorého je možné priamo generovať kód zo serverového API. Výrazné zjednodušenie práce.
2. Obsah
ORM, výhody nevýhody
NotORM
Prekvapenie
Ako na db v Nette frameworku
3. Varovanie!
Moje skúsenosti
Neukazujem neomylné múdrosti sveta
4. O mne
www.education.sk
Intranetové riešenia CRM
– ORM - 5 rokov
– Alternatívy k ORM asi 2 roky
5. Čo je to ORM?
Object-relational mapping
Hlavná úloha:
– Synchronizovať objekty v aplikácii a ich
reprezentáciu v relačnej databáze tak, aby bola
zachovaná persistencia dát.
Niekoľko návrhových vzorov pre ORM
– Active Record
6. Prečo ORM
Odtieniť vývojára od DB a SQL
Uľahčiť jednoduché operácie CRUD
Nezávislosť na databázovom systéme
Umožňuje generovanie kódu
Efektivita je „good enough“
7. Ako začať pracovať s ORM?
class User extends BaseActiveRecord {
protected $id;
/** @Column(type="string") **/
public $name;
function tableName() {
return 'user';
}
static function all() {
// return … collection ...;
}
static function find($id) {
// return … user model;
}
function getName() {
return $this->name;
}
function setName($value) {
$this->name = $value;
}
}
8. Základné použitie ORM
// ešte treba nejako definovať relácie
$user = User::find(10);
$user->delete();
$user = new User();
$user->name = 'Janko Hraško';
$user->save();
$users = User::all();
$users = User::all()->filter(...)->order(...)->someSql(..);
$users = User::all()->onlyEnabled();
9. Problém č.1: Odtienenie od SQL
Otázka: Existuje vývojár, ktorý nepozná SQL?
Princíp 80/20 nefunguje
– Platí len na začiatku, blog za 15min
– Pokiaľ robíte niečo zložité:
● $users = User::all()->sql('....');
Nemusíte poznať SQL?
– Musíte a okrem toho ešte aj ORM vrstvu
Cieľ – zjednodušiť
– Nakoniec som musel obchádzať ORM
10. Problém č.2: Efektivita
ORM tvrdia, že nie sú zamerané na efektivitu,
že efektivita je „good enough“
Vlastnosti, stĺpce
JOINy, napríklad blog: Články + komentáre.
– Koľko akých dotazov vaše ORM položí?
– Vie použiť JOIN?
foreach (Article::all()->limit(10) as $article) {
echo $article->title;
foreach ($article->comments as $comment) {
echo $comment->title;
}
}
11. Ďalšie problémy ORM
Nezávislosť na databázovom systéme
– Napríklad aj PDO je nezávislé na db
Umožňuje generovanie kódu
Ukecanosť
– Modely, vlastnosti, relácie, gettery, settery
– Ak ste platený od počtu riadkov je ORM super ;-)
12. Je teda ORM antipattern?
Kritéria podľa knihy „AntiPatterns“:
– Na začiatku sa to javí ako prínosné, ale postupom
času sa objavuje stále viac zlých dôsledkov ako
dobrých
– Existuje alternatívne riešenie
13. NotORM
Knižnica na práca s datami v DB
Ani riadok nazmar!
– žiadne modely, relácie, vlastnosti, validátory,
gettery, settery
Ani znak nazmar!
– Minimalistické API
Veľký dôraz na výkon
– Konštantný počet dotazov
Výborná podpora JOINov
– Využíva bežné konvencie
14. Ako vyzerá NotORM
$db = new NotORM($pdo);
foreach ($db->user() as $user) { // User::all()
echo "$user[name]n";
}
$user = $db->user[2]; // User::find(2);
foreach ($db->article()->limit(10) as $article) {
echo "$article[title]n";
foreach ($article->comment() as $comment) {
echo " - $comment[title]n";
}
}
SELECT * FROM article LIMIT 10;
SELECT * FROM comment WHERE article_id IN (1,2,3,4,5,6,7,8,9,10);
15. Problémy s NotORM
Nepodstatné počiatočné problémy
– Vyžaduje iné myslenie
– Pre niekoho možno až príliš minimalistické API
Vážnejšie problémy
– Generovanie SQL nemáte pod kontrolou
● Niektoré zložité queries som nedokázal prepísať
– Niektoré veci sa nedajú urobiť
● Inner join
● Podmienka v joine
Toto sa nedá: SELECT * FROM article
INNER JOIN user ON user.id = article.user_id AND …
16. Naspäť k PDO
Na PDO je dobré
– Abstraktná vrstva – MySQL, SQLite, PostgreSQL,
Oracle, ….
– Eskejpovanie, viazanie premenných
– Implementované Traversable
Čo mi chýbalo na PDO
– Viazanie polí, nedá sa urobiť:
● query('id in (?)', $array)
– Neexistuje fluent interface
17. Niečo nové?
Postavené na PDO
Mať plnú kontrolu nad generovaným SQL
Fluent interface
Zero configuration (žiadne modely, relácie,
gettery, ...)
Jednoduché API
Čo najkratší zápis, inteligentné JOINy,
využívajúce konvencie
Prichádza svetová premiéra... ;-)
18. FluentPDO
@FluentPDO
fluentpdo.com
Spĺňa uvedené podmienky
19. Ako to používam v Nette
Príklad v nette:
– https://github/lichtner/fluentpdo-nette-sandbox
20. Otázky?
Kontakt
– @MarekLichtner (licht.sk)
– @FluentPDO (fluentpdo.com)