Driving development in PHP
-
Upload
eduardo-gulias -
Category
Software
-
view
679 -
download
0
description
Transcript of Driving development in PHP
![Page 1: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/1.jpg)
Driving
Your
Development
In
PHP
![Page 2: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/2.jpg)
About this guy
● Strict EmailValidator PHP library, dependency of Symfoy 2 framework
● ListenersDebugCommand, dependency of eZ Publish CMS
● Works at Packlink
● @egulias in Twitter/Github
![Page 3: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/3.jpg)
This talk is NOT about automated testing
![Page 4: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/4.jpg)
Because you are already testing, right?
![Page 5: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/5.jpg)
![Page 6: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/6.jpg)
What means “driving your development”?
![Page 7: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/7.jpg)
"Tactics is what you do when there is something to do; strategy is what you do when there is
nothing to do."
by Ksawery Tartakower leading Polish and French chess grandmaster.
![Page 8: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/8.jpg)
Are the tactics and tools we, software developers, have for helping us in creating software we won't
hate in 2 weeks
![Page 9: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/9.jpg)
Development Driven (tactics)
VS
Application Architecture (strategies)
![Page 10: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/10.jpg)
Development driven are our “tactics” for when we are developing.
![Page 11: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/11.jpg)
And Software architecture are the “strategies” we follow to guide future development.
![Page 12: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/12.jpg)
Which Strategies do we have?
● Hexagonal (ports and adapters) - Alistair Cockburn and adopted by Steve Freeman, and Nat Pryce in their book Growing Object Oriented Software
● Clean Architecture, by Robert C. Martin
● Layered Architecture, used by Eric Evans in Domain Driven Development
● Event Driven, by Martin Fowler
● Command Query Responsibility Segregation (CQRS) by Martin Fowler
● And many others
![Page 13: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/13.jpg)
Which Tactics do we have?
● Test Driven Development - Kent Beck
● Domain Driven Design - Eric Evans
● Behavior Driven Development - Dan North
● Database Driven Development
● Feature Driven Development - Jeff de Luca
● And many others
![Page 14: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/14.jpg)
![Page 15: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/15.jpg)
TDD – 2002 – Kent Beck
DDD – 2003 – Eric Evans
BDD - ~2004 – Dan North
![Page 16: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/16.jpg)
TEST DRIVEN DEVELOPMENT
![Page 17: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/17.jpg)
Test Driven Development
● Make the test red
● Make it green (Implement)
● Refactor (Remove duplication)
![Page 18: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/18.jpg)
Test Driven Development
● Assertion First ● Baby Steps
![Page 19: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/19.jpg)
https://github.com/egulias/TagDebug/blob/master/Tests/Tag/Filter/NameTest.php
![Page 20: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/20.jpg)
https://github.com/egulias/TagDebug/blob/master/Tests/Tag/Filter/NameTest.php
![Page 21: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/21.jpg)
https://github.com/egulias/TagDebug/blob/master/Tag/Filter/Name.php
![Page 22: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/22.jpg)
https://github.com/egulias/TagDebug/blob/master/Tests/Tag/Filter/NameTest.php
![Page 23: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/23.jpg)
Test Driven Development
● Triangulation ● Oblivious Implementation
![Page 24: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/24.jpg)
Test Driven Development
Tools
![Page 25: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/25.jpg)
Test Driven Development
● PHPUnit– Alone
– Mockery
– Prophecy
– Phake
● Simpletest
![Page 26: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/26.jpg)
Test Driven Development
● PHPUnit– Alone
– Mockery
– Prophecy
– Phake
● Simpletest
![Page 27: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/27.jpg)
https://github.com/egulias/TagDebug/blob/master/Tests/Tag/Filter/NameTest.php
![Page 28: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/28.jpg)
Test Driven Development
● PHPUnit– Alone
– Mockery
– Prophecy
– Phake
● Simpletest
![Page 29: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/29.jpg)
https://github.com/egulias/TagDebug/blob/master/Tag/Filter/Name.php
![Page 30: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/30.jpg)
Test Driven Development
● PHPUnit– Alone
– Mockery
– Prophecy
– Phake
● Simpletest
![Page 31: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/31.jpg)
Test Driven Development
● PHPUnit– Alone
– Mockery
– Prophecy
– Phake
● Simpletest (2012)
![Page 32: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/32.jpg)
100% COVERAGE
BECAUSE YEAH
![Page 33: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/33.jpg)
DOMAIN DRIVEN DESIGN
![Page 34: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/34.jpg)
Is NOT a silver bullet
![Page 35: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/35.jpg)
● Objects with Business meaning and value
● Databases, Frameworks, etc are implementation details
● Focus your development on business behavior
Domain Driven Design
![Page 36: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/36.jpg)
Domain Driven Design
There are artifacts and strategies but no tools
![Page 37: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/37.jpg)
Entity
Aggregate
Repository
Value Object
BoundedContext
Ubiquitous Language
Factory
Service
DomainEvent
Domain Driven Design
![Page 38: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/38.jpg)
Constraints
Specification
IntentionRevealingInterfaces
Side-effectFREE
Functions
Shared Kernel
Anti-corruptionLayer
Domain Driven Design
![Page 39: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/39.jpg)
https://github.com/Bodaclick/EVTCore/blob/dev/src/EVT/CoreDomain/Lead/Event.php
![Page 40: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/40.jpg)
https://github.com/Bodaclick/EVTCore/blob/dev/src/EVT/CoreDomain/Lead/Lead.php
![Page 41: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/41.jpg)
https://github.com/Bodaclick/EVTCore/blob/dev/src/EVT/CoreDomain/RepositoryInterface.php
![Page 42: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/42.jpg)
https://github.com/Bodaclick/EVTCore/blob/dev/src/EVT/CoreDomainBundle/Resources/config/services.yml
![Page 43: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/43.jpg)
https://github.com/Bodaclick/EVTCore
![Page 44: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/44.jpg)
![Page 45: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/45.jpg)
BEHAVIOR DRIVEN DEVELOPMENT
![Page 46: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/46.jpg)
Behavior Driven Development
● Test method names should be sentences● A simple sentence template keeps test methods
focused● An expressive test name is helpful when a test
fails● “Behavior” is a more useful word than “test”● Acceptance criteria should be executable
From http://dannorth.net/introducing-bdd/
![Page 47: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/47.jpg)
Behavior Driven Development
Tools
![Page 48: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/48.jpg)
Behavior Driven Development
Behathttp://docs.behat.org
![Page 49: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/49.jpg)
https://github.com/Sylius/Sylius/blob/master/features/backend/shipping_categories.feature
![Page 50: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/50.jpg)
https://github.com/Sylius/Sylius/blob/master/src/Sylius/Bundle/ShippingBundle/Behat/ShippingContext.php
![Page 51: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/51.jpg)
Behavior Driven Development
phpSpechttp://phpspec.net/docs/introduction.html
Unit Testing for BDD
![Page 52: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/52.jpg)
https://github.com/Sylius/Sylius/blob/master/src/Sylius/Component/Shipping/spec/Sylius/Component/Shipping/Calculator/FlexibleRateCalculatorSpec.php
![Page 53: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/53.jpg)
![Page 54: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/54.jpg)
What about the real world?
![Page 55: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/55.jpg)
All what you have just seen, are real world examples
![Page 56: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/56.jpg)
Real world companies
![Page 57: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/57.jpg)
RECOMMENDED READINGS
![Page 58: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/58.jpg)
![Page 59: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/59.jpg)
![Page 60: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/60.jpg)
![Page 61: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/61.jpg)
![Page 62: Driving development in PHP](https://reader036.fdocuments.us/reader036/viewer/2022062513/5563bd90d8b42a38198b5435/html5/thumbnails/62.jpg)