Seni projektai, nauji įrankiai

42
Seni projektai, nauji įrankiai Seni projektai, nauji įrankiai VilniusPHP Susitikimas #1 Povilas Balzaravičius 2012 m. gruodžio 6 d.

description

Kaip seniems PHP projektams pritaikyti naujus įrankius ir komponentus.

Transcript of Seni projektai, nauji įrankiai

Page 1: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiVilniusPHP Susitikimas #1

Povilas Balzaravičius

2012 m. gruodžio 6 d.

Page 2: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiĮžanga

Kas aš toks?

Povilas Balzaravič[email protected]/pawkalinkedin.com/in/pawkapawka.linija.net

Page 3: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiĮžanga

Seni projektai

Seni projektai

Page 4: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiĮžanga

Seni projektai

Kas jie tokie?

PHP 4.x/5.x.Kodas >= 4 metų senumo.Niekur nematytas kodo stilius(-ai).Nenaudojamas žmonijai žinomas karkasas.include, require ir draugai.

Page 5: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiĮžanga

Seni projektai

Kylančios problemos

Didžiulės sąnaudos tvarkingai perrašyti kodą.Naujo funkcionalumo pridėjimas reikalauja daug laiko.Kažką pajudinus viskas griūna.Šlykštoka dirbti…

Page 6: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiProjektų gaivinimas

Pradedam!

Page 7: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiProjektų gaivinimas

Kodo stilius

StiliusNaujas projektas - naujas programavimo stilius.

Page 8: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiProjektų gaivinimas

Kodo stilius

Standartas

PSR

Page 9: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiProjektų gaivinimas

Kodo stilius

PSR Standartas

PHP Specification Request - programavimo stiliausrekomendacija.

Sudaro trys dokumentai:PSR-0 Autoload standartas.PSR-1 “Basic Coding Standard” - Koduotė, PHP tagai,

konstantos, klasių ir metodų pavadinimai, …PSR-2 “Coding Style Guide” - Tarpai, skliausteliai ir

kableliai :-)

Standarto aprašymas: github.com/php-fig/fig-standards/

Page 10: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiProjektų gaivinimas

Kodo stilius

PSR Standartas

PHP Specification Request - programavimo stiliausrekomendacija.

Sudaro trys dokumentai:PSR-0 Autoload standartas.

PSR-1 “Basic Coding Standard” - Koduotė, PHP tagai,konstantos, klasių ir metodų pavadinimai, …

PSR-2 “Coding Style Guide” - Tarpai, skliausteliai irkableliai :-)

Standarto aprašymas: github.com/php-fig/fig-standards/

Page 11: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiProjektų gaivinimas

Kodo stilius

PSR Standartas

PHP Specification Request - programavimo stiliausrekomendacija.

Sudaro trys dokumentai:PSR-0 Autoload standartas.PSR-1 “Basic Coding Standard” - Koduotė, PHP tagai,

konstantos, klasių ir metodų pavadinimai, …

PSR-2 “Coding Style Guide” - Tarpai, skliausteliai irkableliai :-)

Standarto aprašymas: github.com/php-fig/fig-standards/

Page 12: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiProjektų gaivinimas

Kodo stilius

PSR Standartas

PHP Specification Request - programavimo stiliausrekomendacija.

Sudaro trys dokumentai:PSR-0 Autoload standartas.PSR-1 “Basic Coding Standard” - Koduotė, PHP tagai,

konstantos, klasių ir metodų pavadinimai, …PSR-2 “Coding Style Guide” - Tarpai, skliausteliai ir

kableliai :-)

Standarto aprašymas: github.com/php-fig/fig-standards/

Page 13: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiProjektų gaivinimas

Kodo stilius

PSR Standartas

PHP Specification Request - programavimo stiliausrekomendacija.

Sudaro trys dokumentai:PSR-0 Autoload standartas.PSR-1 “Basic Coding Standard” - Koduotė, PHP tagai,

konstantos, klasių ir metodų pavadinimai, …PSR-2 “Coding Style Guide” - Tarpai, skliausteliai ir

kableliai :-)

Standarto aprašymas: github.com/php-fig/fig-standards/

Page 14: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiProjektų gaivinimas

Kodo stilius

Sprendimas

php-cs-fixer

Page 15: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiProjektų gaivinimas

Kodo stilius

PHP Coding Standards Fixer

Įrankis skirtas kodo stiliaus tvarkymui pagal PSR-1 ir PSR-2standartus.

Autorius: Fabien Potencierhttp://cs.sensiolabs.org/Galimybė tvarkyti tik tam tikras sritis (identacija,skliaustų išdėstymas, …)…ir/arba naudoti paruoštas konfigūracijas (sf20, sf21,magento, default).

Page 16: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiProjektų gaivinimas

Kodo stilius

PHP Coding Standards Fixer - naudojimas

1 sudo wget http://cs.sensiolabs.org/get/php-cs-fixer.phar -O/usr/local/bin/php-cs-fixer

2 sudo chmod a+x /usr/local/bin/php-cs-fixer

3 php php-cs-fixer.phar fix /path/to/dir

4 Džiaugiamės tvarkingu kodu :-)

(dažniausiai)

Page 17: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiProjektų gaivinimas

Kodo stilius

PHP Coding Standards Fixer - naudojimas

1 sudo wget http://cs.sensiolabs.org/get/php-cs-fixer.phar -O/usr/local/bin/php-cs-fixer

2 sudo chmod a+x /usr/local/bin/php-cs-fixer

3 php php-cs-fixer.phar fix /path/to/dir

4 Džiaugiamės tvarkingu kodu :-) (dažniausiai)

Page 18: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiProjektų gaivinimas

Išorinės bibliotekos

Išorinės bibliotekosNaudojam tai, kas jau sukurta.

Page 19: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiProjektų gaivinimas

Išorinės bibliotekos

Problemos

Nepatogu įtrauktį į kodą.Gali priklausyti nuo kitų bibliotekų.Saugomos kartu su projekto kodu.Nepatogu atnaujinti.

Page 20: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiProjektų gaivinimas

Išorinės bibliotekos

Sprendimas

Composer

Page 21: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiProjektų gaivinimas

Išorinės bibliotekos

Composer

Autorius: Jordi Boggianohttp://getcomposer.org/Suranda, instaliuoja, atnaujina ir autoloadina paketus.

Page 22: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiProjektų gaivinimas

Išorinės bibliotekos

Composer - naudojimas

1 curl -s https://getcomposer.org/installer | php2 Parsiunčiamas composer.phar3 php composer.phar <komanda>

Page 23: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiProjektų gaivinimas

Išorinės bibliotekos

Composer - paketų instaliavimas

1 Susirandam paketą ir jo versiją:php composer.phar search kažkas arba packagist.org.

2 Pvz. doctrine/dbal 2.3.0.3 Įtraukiam paketą į composer.json.4 php composer.phar install (arba update).5 Parsiųs paketus ir sugeneruos Autoload failus.

Page 24: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiProjektų gaivinimas

Išorinės bibliotekos

Page 25: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiProjektų gaivinimas

Išorinės bibliotekos

Composer - naudojimas

composer.json pavyzdys

O tada…

Page 26: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiProjektų gaivinimas

Išorinės bibliotekos

Composer - naudojimas

composer.json pavyzdys

O tada…

Page 27: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiProjektų gaivinimas

Išorinės bibliotekos

Iš ko rinktis?

Page 28: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiProjektų gaivinimas

Išorinės bibliotekos

Symfony Components

symfony.com/components

BrowserKitClassLoaderConfigConsoleCssSelectorDependencyInjectionDomCrawlerEventDispatcherFinderFormHttpFoundation

HttpKernelLocaleProcessRoutingSecuritySerializerTemplatingTranslationValidatorYaml

Page 29: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiProjektų gaivinimas

Išorinės bibliotekos

Zend Framework 2

48 atskiri komponentaiframework.zend.com

Page 30: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiMano pasirinkimas

Kaip dirbu aš?

Page 31: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiMano pasirinkimas

Darbo planas

1 Stiliaus sutvarkymas.2 Composer paruošimas.3 DBAL (vienareikšmiškai doctrine/dbal).4 Dependency Injection Container.5 Routing’o įdiegimas.6 Naujo kodo rašymas teisinga tvarka.

Page 32: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiMano pasirinkimas

Dependency Injection Container

Dependency InjectionContainer

Page 33: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiMano pasirinkimas

Dependency Injection Container

Kam reikalingas?

Objektų kūrimo taisyklės saugomos vienoje vietoje.Lazy Loading - objektai kuriami tik tada, kai jų prireikia.

Fabien Potencier… when you need to manage a lot of different objects with alot of dependencies, a Dependency Injection Container can bereally helpful (think of a framework for instance).

Pasiskaitymui: “What is Dependency Injection” by @fabpot.

Page 34: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiMano pasirinkimas

Dependency Injection Container

Pimple

A simple Dependency Injection Container for PHP 5.3Autorius: Fabien Potencierpimple.sensiolabs.orgPaprastasGreitasIntegravimas - kelios eilutės.Primityvus (pvz. lyginant su SymfonyDependencyInjection)

Page 35: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiMano pasirinkimas

Routing

Routing

Page 36: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiMano pasirinkimas

Routing

Kam reikalingas?

Iškviesti reikiamą Controller’io Actions’ą pagal URL.Iškviečiant priskirti kintamuosius iš URL.URL generatorius pagal route’o pavadinimą.Dažnai senesni projektai neturi :-(

Page 37: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiMano pasirinkimas

Routing

Symfony Routing Component

symfony.com/doc/current/components/routing/Integravimas - kelios eilutės.Sprendžia visas anksčiau aprašytas problemas.

Page 38: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiMano pasirinkimas

Teisingas kodas

Teisingas kodas

Page 39: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiMano pasirinkimas

Teisingas kodas

Service-oriented architecture

Symfony GlossaryA Service is a generic term for any PHP object that performsa specific task. A service is usually used "globally", such as adatabase connection object or an object that delivers emailmessages. In Symfony2, services are often configured andretrieved from the service container. An application that hasmany decoupled services is said to follow a service-orientedarchitecture.

Page 40: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiMano pasirinkimas

Teisingas kodas

SOA Robotikos taisyklės

Modeliai - žemiausias lygmuo, vieni apie kitus nežino.Servisas žino apie jam priklausančius modelius.Servisas gali žinoti apie kitus servisus.Kontroleriai nežino nieko apie modelius ir naudoja TIKservisus.

Page 41: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiPabaiga

Apibendrinimas

Naują kodą rašykite tvarkingai.Seną kodą perrašinėkite nedidelėmis dalimis ir tik tada,kai to reikia.Naudokite jau sukurtus įrankius.Sugaišit laiko sutvarkymui, bet laimėsit kurdami naujasfunkcijas.

Page 42: Seni projektai, nauji įrankiai

Seni projektai, nauji įrankiaiPabaiga

Ačiū