principles of php package design - domcode, first monthly meeting
DESCRIPTION
Slides for my talk "Principles of PHP Package Design" at the first monthly meeting of DomCode: http://www.meetup.com/DomCode/events/192964782/TRANSCRIPT
![Page 1: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/1.jpg)
Principles of PHP Package DesignObject oriented design for packages
Matthias Noback - Noback's OfficeDomCode, first monthly meeting - 7/28/2014
![Page 2: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/2.jpg)
First monthly meeting of DomCode
2/52
![Page 3: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/3.jpg)
Also: congratulations to SweetlakePHP
3/52
![Page 4: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/4.jpg)
Matthias NobackNoback's Office
PHP developerWriter/speakerProud father
·
·
·
4/52
![Page 7: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/7.jpg)
Tight couplingCoupling to a framework
7/52
![Page 8: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/8.jpg)
Code
8/52
![Page 9: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/9.jpg)
Squiggly lines
9/52
![Page 10: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/10.jpg)
Code
10/52
![Page 11: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/11.jpg)
PackagesThere are many different kinds
11/52
![Page 12: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/12.jpg)
Class design
12/52
![Page 13: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/13.jpg)
Package designNothing?
butunclebob.com
13/52
![Page 14: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/14.jpg)
Principles of PHP Package Design
leanpub.com/principles-of-php-package-design
14/52
![Page 15: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/15.jpg)
Package designCohesion
15/52
![Page 16: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/16.jpg)
Package designCoupling
16/52
![Page 17: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/17.jpg)
A - Cohesion principlesPerspective: the package in isolation
17/52
![Page 18: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/18.jpg)
1 - The Release Reuse Equivalence PrincipleThe granule of reuse is the granule of release
18/52
![Page 19: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/19.jpg)
1 - The Release Reuse Equivalence Principle
Version control and hosting
Composer package definition
Meta-files
Auto-loading
·
·
·
·
Semantic versioning
Quality control
·
BranchesTagsBackward compatibility
-
-
-
·
19/52
![Page 20: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/20.jpg)
1 - The Release Reuse Equivalence Principle
If you don't have the time to turn your reusable code into a proper package...
Don't release it.
20/52
![Page 21: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/21.jpg)
2- The Common Reuse PrincipleClasses that are used together are packaged together
If you use one class of a package,you will use all its other classes too.
21/52
![Page 22: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/22.jpg)
2- The Common Reuse PrincipleSmell: Feature strata
22/52
![Page 23: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/23.jpg)
2- The Common Reuse PrincipleExample of feature strata: the Symfony Security Component
23/52
![Page 24: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/24.jpg)
2- The Common Reuse PrincipleSmell: Classes with different dependencies
24/52
![Page 25: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/25.jpg)
2- The Common Reuse PrincipleExample of different dependencies: Gaufrette
25/52
![Page 26: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/26.jpg)
2- The Common Reuse PrincipleDifferent dependencies: Gaufrette
{ "name": "knplabs/gaufrette", ... "suggest": { "knplabs/knp-gaufrette-bundle": "to use with Symfony2", "dropbox-php/dropbox-php": "to use the Dropbox adapter", "rackspace/php-opencloud" : "to use Opencloud adapter", "herzult/php-ssh": "to use SFtp adapter", "phpseclib/phpseclib": "to use PhpseclibSftp adapter", "aws/aws-sdk-php": "to use the Amazon S3 adapter", "amazonwebservices/aws-sdk-for-php": "to use the legacy Amazon S3 adapters", "doctrine/dbal": "to use the Doctrine DBAL adapter", "microsoft/windowsazure": "to use Microsoft Azure Blob Storage adapter", "ext-zip": "to use the Zip adapter", "ext-apc": "to use the APC adapter", ... }, ...} 26/52
![Page 27: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/27.jpg)
2 - The Common Reuse PrincipleLeszek Prabucki's response
27/52
![Page 28: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/28.jpg)
3 - The Common Closure PrincipleClasses that change together are packaged together
28/52
![Page 29: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/29.jpg)
3 - The Common Closure PrincipleReasons for change
The application's features changeThe business rules changeThe web framework's best practices changeThe persistence library's configuration changes...
·
·
·
·
·
29/52
![Page 30: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/30.jpg)
3 - The Common Closure PrincipleSmell: code for multiple application layers
Web User InterfaceCommand-line interfaceModelInfrastructure services
·
·
·
·
30/52
![Page 31: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/31.jpg)
B - Coupling principlesPerspective: the package in relation to other packages
31/52
![Page 32: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/32.jpg)
4 - The Acyclic Dependencies PrincipleThe dependency graph of packages must have no cycles
32/52
![Page 33: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/33.jpg)
4 - The Acyclic Dependencies Principle
33/52
![Page 34: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/34.jpg)
Stability
Something is stable if it's resistant to change.
34/52
![Page 35: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/35.jpg)
5 - The Stable Dependencies PrincipleAn irresponsible package
35/52
![Page 36: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/36.jpg)
5 - The Stable Dependencies PrincipleA dependent package
36/52
![Page 37: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/37.jpg)
5 - The Stable Dependencies PrincipleAn instable package: irresponsible and dependent
37/52
![Page 38: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/38.jpg)
5 - The Stable Dependencies PrincipleA responsible package
38/52
![Page 39: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/39.jpg)
5 - The Stable Dependencies PrincipleAn independent package
39/52
![Page 40: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/40.jpg)
5 - The Stable Dependencies PrincipleA stable package: responsible and independent
40/52
![Page 41: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/41.jpg)
5 - The Stable Dependencies PrincipleDepend in the direction of stability
41/52
![Page 42: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/42.jpg)
5 - The Stable Dependencies PrincipleCounter example
42/52
![Page 43: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/43.jpg)
6 - The Stable Abstractions PrincipleWhat is more likely to change?
Something concrete or something abstract?A class or an interface?
·
·
43/52
![Page 44: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/44.jpg)
6 - The Stable Abstractions PrincipleAbstractness should increase with stability
44/52
![Page 45: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/45.jpg)
Summary
Reuse/release equivalence principle
Common reuse principle
Common closure principle
Acyclic dependencies principle
Stable dependencies principle
Stable abstractions principle
·
Reuse only code that you can release as a product.-
·
All code in a package is reused at the same time.-
·
Code in a package only changes for a few reasons.-
·
No cycles in the dependency graph.-
·
Only depend on more stable packages.-
·
More stable packages are also more abstract.-
45/52
![Page 46: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/46.jpg)
Word of advice
You can't maximize them all at the same time.
Keep them in mind while you are working on a package.
46/52
![Page 47: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/47.jpg)
Principles of PHP Package Design
leanpub.com/principles-of-php-package-design
I'm impressed. — Robert C. Martin
47/52
![Page 48: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/48.jpg)
Principles of PHP Package Design
Get a 10 dollar discount:
http://leanpub.com/principles-of-php-package-design/c/domcode
48/52
![Page 49: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/49.jpg)
Questions?
feedback joind.in/11580
twitter @matthiasnoback
leanpub leanpub.com/principles-of-php-package-design
49/52
![Page 50: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/50.jpg)
Image courtesy
Clean CodersGitHubBitBucketPackagistPoEAABut Uncle BobRobert Martin
·
·
·
·
·
·
·
50/52
![Page 51: Principles of PHP Package Design - DomCode, first monthly meeting](https://reader034.vdocuments.mx/reader034/viewer/2022052303/53fda14e8d7f72a81c8b4a0d/html5/thumbnails/51.jpg)
52/52