seni projektai, nauji įrankiai
DESCRIPTION
Kaip seniems PHP projektams pritaikyti naujus įrankius ir komponentus.TRANSCRIPT
Seni projektai, nauji įrankiai
Seni projektai, nauji įrankiaiVilniusPHP Susitikimas #1
Povilas Balzaravičius
2012 m. gruodžio 6 d.
Seni projektai, nauji įrankiaiĮžanga
Kas aš toks?
Povilas Balzaravič[email protected]/pawkalinkedin.com/in/pawkapawka.linija.net
Seni projektai, nauji įrankiaiĮžanga
Seni projektai
Seni projektai
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.
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…
Seni projektai, nauji įrankiaiProjektų gaivinimas
Pradedam!
Seni projektai, nauji įrankiaiProjektų gaivinimas
Kodo stilius
StiliusNaujas projektas - naujas programavimo stilius.
Seni projektai, nauji įrankiaiProjektų gaivinimas
Kodo stilius
Standartas
PSR
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/
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/
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/
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/
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/
Seni projektai, nauji įrankiaiProjektų gaivinimas
Kodo stilius
Sprendimas
php-cs-fixer
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).
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)
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)
Seni projektai, nauji įrankiaiProjektų gaivinimas
Išorinės bibliotekos
Išorinės bibliotekosNaudojam tai, kas jau sukurta.
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.
Seni projektai, nauji įrankiaiProjektų gaivinimas
Išorinės bibliotekos
Sprendimas
Composer
Seni projektai, nauji įrankiaiProjektų gaivinimas
Išorinės bibliotekos
Composer
Autorius: Jordi Boggianohttp://getcomposer.org/Suranda, instaliuoja, atnaujina ir autoloadina paketus.
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>
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.
Seni projektai, nauji įrankiaiProjektų gaivinimas
Išorinės bibliotekos
Seni projektai, nauji įrankiaiProjektų gaivinimas
Išorinės bibliotekos
Composer - naudojimas
composer.json pavyzdys
O tada…
Seni projektai, nauji įrankiaiProjektų gaivinimas
Išorinės bibliotekos
Composer - naudojimas
composer.json pavyzdys
O tada…
Seni projektai, nauji įrankiaiProjektų gaivinimas
Išorinės bibliotekos
Iš ko rinktis?
Seni projektai, nauji įrankiaiProjektų gaivinimas
Išorinės bibliotekos
Symfony Components
symfony.com/components
BrowserKitClassLoaderConfigConsoleCssSelectorDependencyInjectionDomCrawlerEventDispatcherFinderFormHttpFoundation
HttpKernelLocaleProcessRoutingSecuritySerializerTemplatingTranslationValidatorYaml
Seni projektai, nauji įrankiaiProjektų gaivinimas
Išorinės bibliotekos
Zend Framework 2
48 atskiri komponentaiframework.zend.com
Seni projektai, nauji įrankiaiMano pasirinkimas
Kaip dirbu aš?
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.
Seni projektai, nauji įrankiaiMano pasirinkimas
Dependency Injection Container
Dependency InjectionContainer
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.
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)
Seni projektai, nauji įrankiaiMano pasirinkimas
Routing
Routing
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 :-(
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.
Seni projektai, nauji įrankiaiMano pasirinkimas
Teisingas kodas
Teisingas kodas
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.
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.
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.
Seni projektai, nauji įrankiaiPabaiga
Ačiū