Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Co se PHP programátor může naučit od Javy?

Co se PHP programátor může naučit od Javy?

Filip Procházka

October 28, 2017
Tweet

More Decks by Filip Procházka

Other Decks in Technology

Transcript

  1. Co se PHP programátor
    může naučit od Javy?
    @ProchazkaFilip

    View Slide

  2. Návrhové vzory jsou super
    ● Decorator
    ● Strategy
    ● Visitor
    ● Builder
    ● Factory
    ● BuilderFactory ❤
    ● FactoryBuilderFactory ❤❤
    ● BuilderFactoryBuilderFactory ❤❤❤

    View Slide

  3. View Slide

  4. “Patterns always have two parts:
    the how and the when.
    Not just do you need to know how to implement
    them, you also have to know when to use them
    and when to leave them alone.”
    ~ Martin Fowler

    View Slide

  5. ● Premature abstraction
    ● Premature optimalization
    ● …
    ● Nejprve “nahrubo”
    ● Dodržovat základní pravidla
    ● Po pochopení refaktoring
    YAGNI

    View Slide

  6. Don’t reinvent the wheel: Hotová řešení
    ● Frameworky
    ○ Spring vs Nette vs Symfony
    ● Knihovny
    ○ Hibernate vs Doctrine
    ● Články
    ● Nástroje
    ● ….

    View Slide

  7. Don’t reinvent the wheel: Standardy
    ● JSR 354: Money and Currency API
    ○ https://github.com/brick/money
    ● JSR 310: Date and Time API
    ○ https://github.com/brick/date-time

    View Slide

  8. Compile-time
    ● Kompilace je spása
    ○ Chvilku trvá...
    ○ Nenahrazuje testy!
    ● PHPStan
    https://xkcd.com/303/

    View Slide

  9. (silné)
    Typy!

    View Slide

  10. Silné typy: array
    ● Std lib + Generika
    ○ Map>
    ○ LinkedList vs ArrayList
    ○ HashMap vs TreeMap
    ● PHPDoc
    ○ Příklady v PHPStan testech
    /** @var Collection|Dolor[] */
    private $dolors;

    View Slide

  11. Silné typy: string
    ● Musí být typehint string?
    ● Nešlo by to lépe?

    View Slide

  12. Value objects
    ● VO vs Entity
    ● Hodnota vs identita

    View Slide

  13. Value objects
    ● PHP nemá Time ani Date, má Datetime
    ○ Můžu si napsat vlastní
    ○ Nebo můžu použít Brick! :)
    ● EmailAddress
    ● PhoneNumber
    ● Url (Nette)
    ● DateRange, TimeRange, NumberRange
    ● PostalAddress
    ○ Může a nemusí být VO

    View Slide

  14. Value objects: vlastnosti
    ● Rovnost
    ○ == vs === vs equals()
    ● Validita
    ● Immutabilita
    ● VO != DTO

    View Slide

  15. Shrnutí
    ● Návrhové vzory jsou super
    ● Don’t reinvent the wheel
    ● Silné typy
    ● Value objects

    View Slide

  16. @ProchazkaFilip

    View Slide