02 - gabriel somoza - magento 2 best practices · developersparadise 2016 / opatija / croatia...
TRANSCRIPT
![Page 1: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/1.jpg)
Sample Title
DevelopersParadise2016 / Opatija / Croatia
Magento 2: PHP Development Best Practices
Images are public domain unless otherwise noted.
Gabriel Somoza
![Page 2: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/2.jpg)
DevelopersParadise2016 / Opatija / Croatia
Gabriel Somoza
Magento 1 CD+, Magento 2 Developer Founder @ Strategery
OSS Contributor PHP Limburg BE
![Page 3: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/3.jpg)
DevelopersParadise2016 / Opatija / Croatia
Why This Talk?
1. Understand how Magento 2 meets mainstream PHP
2. Get up to speed with the jargon
3. Accelerate towards being productive
4. Choose which topics to strengthen
![Page 4: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/4.jpg)
DevelopersParadise2016 / Opatija / Croatia
Before we Start
![Page 5: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/5.jpg)
DevelopersParadise2016 / Opatija / Croatia
Follow Magento’s “Core Coding Standards”
1
![Page 6: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/6.jpg)
DevelopersParadise2016 / Opatija / Croatia
PSRs 1 through 4 Code Demarcation Standard
DocBlock Standard JavaScript Coding Standard
JavaScript DocBlock Standard jQuery Widget Standard LESS Coding Standard
HTML Style Guide
Follow Magento’s “Core Coding Standards” 1
![Page 7: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/7.jpg)
DevelopersParadise2016 / Opatija / Croatia
So far, this is a suggestion. Take it.
Follow Magento’s “Core Coding Standards” 1
![Page 8: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/8.jpg)
DevelopersParadise2016 / Opatija / Croatia
![Page 9: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/9.jpg)
DevelopersParadise2016 / Opatija / Croatia
![Page 10: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/10.jpg)
DevelopersParadise2016 / Opatija / Croatia
Write Reusable Components
2
![Page 11: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/11.jpg)
DevelopersParadise2016 / Opatija / Croatia
Magento
Events
Service Layer
CLI
Your Component
Other
Other
Your Domain
Events
Commands
Write Reusable Components 2
![Page 12: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/12.jpg)
DevelopersParadise2016 / Opatija / Croatia
2Write Reusable Components
For more: Driving Your Domain by Examples (13:30)
Marcos Lopes
![Page 13: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/13.jpg)
DevelopersParadise2016 / Opatija / Croatia
Language Packs
Write Reusable Components
Modules
Themes
LibrariesYour Components
registration.php
2
Component Types
![Page 14: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/14.jpg)
DevelopersParadise2016 / Opatija / Croatia
✓ External libraries
Sample component composer.json
✓ Package name
✓ Magento 2 Dependencies
✓ Component Type(module, theme, language)
2Write Reusable Components
![Page 15: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/15.jpg)
DevelopersParadise2016 / Opatija / Croatia
✓ Its OK to have dozens of Composer packages
2Write Reusable Components
![Page 16: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/16.jpg)
DevelopersParadise2016 / Opatija / Croatia
✓ Use Toran Proxy (commercial) or Satis (free, OSS) for private packages
2Write Reusable Components
![Page 17: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/17.jpg)
DevelopersParadise2016 / Opatija / Croatia
2Write Reusable Components
For more: Magento 2 + Composer (12:30)
Peter Jaap
![Page 18: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/18.jpg)
DevelopersParadise2016 / Opatija / Croatia
Write Automated Tests
3
![Page 19: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/19.jpg)
DevelopersParadise2016 / Opatija / Croatia
1. Unit test: generously
2. Integration test: interactions (e.g. with 3rd party systems)
3. Functional/UI test: for acceptance
4. Follow core standardsUnit
Functional
UI
2Write Automated Tests
Mike Cohn
![Page 20: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/20.jpg)
DevelopersParadise2016 / Opatija / Croatia
Distribute unit tests with your component
✓ Better than just:http://shields.io/
✓ Documentation!
3Write Automated Tests
![Page 21: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/21.jpg)
DevelopersParadise2016 / Opatija / Croatia
Understand the Object Manager
(OM)
4
![Page 22: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/22.jpg)
DevelopersParadise2016 / Opatija / Croatia
Dependency Injection
Lifecycle Management
Compilation
Scopes
Special Patterns
Translations
4Understand the OM
![Page 23: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/23.jpg)
DevelopersParadise2016 / Opatija / Croatia
Don’t use it Directly
๏ Testing = nightmare ๏ Coupling to the API ๏ There’s a better way
4Understand the OM
![Page 24: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/24.jpg)
DevelopersParadise2016 / Opatija / Croatia
Automatic Constructor Injection!4Understand the OM
![Page 25: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/25.jpg)
DevelopersParadise2016 / Opatija / Croatia
✓ Declare types ✓ Define arguments ✓ Replace arguments (caution!)
4Understand the OM
Type Definitionsetc/di.xml
![Page 26: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/26.jpg)
DevelopersParadise2016 / Opatija / Croatia
Be aware of what you think when you see the word ”TYPE”
4Understand the OMType Definitions
etc/di.xml
![Page 27: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/27.jpg)
DevelopersParadise2016 / Opatija / Croatia
✓ Use interfaces (./Api/)
4Understand the OM
Preferences
✓ Contextual replacements (caution!)
etc/di.xml
![Page 28: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/28.jpg)
DevelopersParadise2016 / Opatija / Croatia
✓ Delay initialization of “expensive” objects that: • Have to be instantiated (e.g. for typing) • But might not YET need to be initialized
✓ Caching
4Understand the OM
Proxy Objects
etc/di.xml
![Page 29: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/29.jpg)
DevelopersParadise2016 / Opatija / Croatia
4Understand the OM
Plugins (Interception)
etc/di.xml
![Page 30: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/30.jpg)
DevelopersParadise2016 / Opatija / Croatia
Add before / after / around behaviour.
✓ Alternative to before / after events ✓ Around is powerful for decorating or
conditional logic (e.g. authorization) ✓ Manipulate return values (use with caution!)
4Understand the OMPlugins (Interception)
![Page 31: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/31.jpg)
DevelopersParadise2016 / Opatija / Croatia
4Understand the OMPlugins (Interception)
![Page 32: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/32.jpg)
DevelopersParadise2016 / Opatija / Croatia
Better use case:
4Understand the OMPlugins (Interception)
✓ Aligned to the purpose of the intercepted function
![Page 33: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/33.jpg)
DevelopersParadise2016 / Opatija / Croatia
Good applications:
✓ Cleaner alternative to creating/requesting “before” and “after” events ✓ Part of a coherent chain of incremental atomic
transformations designed towards a clear goal
“Less good” applications (*):
๏ As a replacement for existing events ๏ Arbitrary transformations to data
* subject to the type of component you’re building
4Understand the OMPlugins (Interception)
![Page 34: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/34.jpg)
DevelopersParadise2016 / Opatija / Croatia
”VIRTUAL TYPES”
4Understand the OM
![Page 35: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/35.jpg)
DevelopersParadise2016 / Opatija / Croatia
A virtual (no real class!), configurable sub-type of another TYPE
✓ Fine-grained control over DI configuration ✓ Can help avoid repetitive argument replacement
For more: What is the difference between type and virtualType
4Understand the OMVirtual Types
๏ Confusing at first ๏ Weigh their value vs. simplicity ๏ You will hardly need them
![Page 36: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/36.jpg)
DevelopersParadise2016 / Opatija / Croatia
Find the right balance
![Page 37: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/37.jpg)
DevelopersParadise2016 / Opatija / Croatia
2Write Reusable Components
For more: Porting a complex extension to Magento 2 (10:00)
Fabian Schmengler
![Page 38: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/38.jpg)
DevelopersParadise2016 / Opatija / Croatia
Leverage Events
5
![Page 39: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/39.jpg)
DevelopersParadise2016 / Opatija / Croatia
Photo by Dale Gillard / CC BY
Photo by Dale Gillard / CC BY
✓ Similar to Magento 1 ✓ Generally unobtrusive ✓ Nicely decoupled code ✓ Use them whenever possible
Observers In Magento 2 - Cool Ryan
5Leverage Events
etc/events.xml
![Page 40: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/40.jpg)
DevelopersParadise2016 / Opatija / Croatia
Write Defensive Components
6
![Page 41: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/41.jpg)
DevelopersParadise2016 / Opatija / Croatia
Photo by Dale Gillard / CC BY
Photo by Dale Gillard / CC BY
composer require beberlei/assert
4Write Defensive Components
Fail Fast(er)
![Page 42: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/42.jpg)
DevelopersParadise2016 / Opatija / Croatia
Photo by Dale Gillard / CC BY
Photo by Dale Gillard / CC BY
6Write Defensive ComponentsFail Faster
![Page 43: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/43.jpg)
DevelopersParadise2016 / Opatija / Croatia
Photo by Dale Gillard / CC BY
…and don’t forget to CATCH exceptions
Photo by Кирилл Венедиктов / CC BY-SA 3.0
6Write Defensive ComponentsFail Faster
![Page 44: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/44.jpg)
DevelopersParadise2016 / Opatija / Croatia
Default to Strict Encapsulation
Photo by Dale Gillard / CC BY
6Write Defensive Components
![Page 45: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/45.jpg)
DevelopersParadise2016 / Opatija / Croatia
Photo by Dale Gillard / CC BY
WHY!?
6Write Defensive ComponentsDefault to Strict Encapsulation
![Page 46: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/46.jpg)
DevelopersParadise2016 / Opatija / Croatia
Photo by Dale Gillard / CC BY
“Setters don’t mean anything, anywayMarco Pivetta (@ocramius)
“Getter and setter methods are evilAllen Hollub, 2003
6Write Defensive ComponentsDefault to Strict Encapsulation
![Page 47: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/47.jpg)
DevelopersParadise2016 / Opatija / Croatia
Photo by Dale Gillard / CC BY
Getter & Setter Swarm
You can avoid it!
6Write Defensive ComponentsDefault to Strict Encapsulation
![Page 48: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/48.jpg)
DevelopersParadise2016 / Opatija / Croatia
Photo by Dale Gillard / CC BY
6Write Defensive ComponentsDefault to Strict Encapsulation
![Page 49: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/49.jpg)
DevelopersParadise2016 / Opatija / Croatia
Photo by Dale Gillard / CC BY
✓ Dependencies are injected
6Write Defensive ComponentsDefault to Strict Encapsulation
✓ Accessed directly or by private/protected methods
![Page 50: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/50.jpg)
DevelopersParadise2016 / Opatija / Croatia
Photo by Dale Gillard / CC BY
✓ Its easy to expose private API
๏ Its hard to do the opposite (BC breaks)
6Write Defensive ComponentsDefault to Strict Encapsulation
![Page 51: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/51.jpg)
DevelopersParadise2016 / Opatija / Croatia
Photo by Dale Gillard / CC BY
✓ Prevent unnecessary BC breaks ✓ Encourage more expressive APIs ✓ Encourage better abstractions ✓ Simplify test-cases
Some benefits:
6Write Defensive ComponentsDefault to Strict Encapsulation
![Page 52: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/52.jpg)
DevelopersParadise2016 / Opatija / Croatia
Photo by Dale Gillard / CC BY
๏ Avoid final for classes used in the OM’s Proxy pattern
IMPORTANT
6Write Defensive ComponentsDefault to Strict Encapsulation
![Page 53: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/53.jpg)
DevelopersParadise2016 / Opatija / Croatia
Photo by Dale Gillard / CC BY
Extremely Defensive PHP - Marko Pivetta
Write lots of good tests
Defensive Programming - Wikipedia
6Write Defensive Components
More on Defensive Programming
![Page 54: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/54.jpg)
DevelopersParadise2016 / Opatija / Croatia
Don’t Forget to Document!
7
![Page 55: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/55.jpg)
DevelopersParadise2016 / Opatija / Croatia
At least with a README.md
*empty*
7Don’t Forget to Document!
![Page 56: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/56.jpg)
DevelopersParadise2016 / Opatija / Croatia
7Don’t Forget to Document!
![Page 57: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/57.jpg)
DevelopersParadise2016 / Opatija / Croatia
✓ Build Status ✓ Description ✓ Installation ✓ Features / Configuration ✓ LICENSE ✓ Support & Author ✓ Contributing Guide
What to include in README.md?
7Don’t Forget to Document!
![Page 58: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/58.jpg)
DevelopersParadise2016 / Opatija / Croatia
Leverage Generic Composer Packages
8
![Page 59: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/59.jpg)
DevelopersParadise2016 / Opatija / Croatia
Photo by Dale Gillard / CC BY
Photo by Dale Gillard / CC BY
beberlei/assert
monolog/monolog
mockery/mockery
league/factory-muffin
prooph/event-sourcing
league/tactician
8Leverage Generic Composer Packages
![Page 60: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/60.jpg)
DevelopersParadise2016 / Opatija / Croatia
Stay Up to Date
9
![Page 61: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/61.jpg)
DevelopersParadise2016 / Opatija / Croatia
Photo by Dale Gillard / CC BY
magentotherightway.commostly Magento 1 ATM
phptherightway.com
alanstorm.com
9Stay Up to Date
devdocs.magento.com
![Page 62: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/62.jpg)
DevelopersParadise2016 / Opatija / Croatia
2Write Reusable Components
For security best practices: Leveraging Magento 2 to combat the OWASP Top Ten
(tomorrow 13:00) Tales Seeparsan
![Page 63: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/63.jpg)
DevelopersParadise2016 / Opatija / Croatia
Questions?
![Page 64: 02 - Gabriel Somoza - Magento 2 best practices · DevelopersParadise 2016 / Opatija / Croatia Magento 2: PHP Development Best Practices Images are public domain unless otherwise noted](https://reader033.vdocument.in/reader033/viewer/2022042008/5e70ee2af742a972f73d52fa/html5/thumbnails/64.jpg)
DevelopersParadise2016 / Opatija / Croatia
Thank You!