enterprise php development - ivo jansch
DESCRIPTION
TRANSCRIPT
Ibuildings - http://www.ibuildings.com
Enterprise PHP development
Ivo Jansch <[email protected]>
Dutch PHP Conference, June 14, 2008
Tuesday, February 26, 2008 2
What's an enterprise?
• Wikipedia: “Any of several ships by that name in the Star Trek
fictional universe”
“A business, company, or comparable organization”
Tuesday, February 26, 2008 3
Is PHP Enterprise ready?
• CIO Magazine:
“PHP works well for prototyping because it is easy to get a site up and running. Use PHP to design the site [...] but when it comes time for development, tell the team you want the result to look and act like this PHP site...but in Java”
(Or: “great, this is exactly what I need! now do it again, at twice the cost!”)
http://www.cio.com/article/176250 (skip the article, read the comments)
Tuesday, February 26, 2008 4
Is PHP Enterprise ready?
Small Lightweight Cheap Easy to learn
Big Enterprise friendly enterpriCe CS required
Tuesday, February 26, 2008 5
A word from my girlfriend
It's not the
SIZE
of the tool...
It's how you USE it.
Tuesday, February 26, 2008 6
PHP is changing...
• 1998 Personal stuff
• 2003 Simple websites Content management Blogs
• 2008 Big websites Banks Insurance Companies ...
Tuesday, February 26, 2008 7
PHP is changing...
• Traditional metaphor PHP is like Lego bricks
Bricks allowing you to build anything
Tuesday, February 26, 2008 8
PHP is changing...
• PHP is no longer a toy Let’s use the metaphor of actual bricks
Because we’re building actual buildings now
Tuesday, February 26, 2008 9
About Bricks
• Extreme simplicity • Easy to learn • Versatile • Cheap
... so building a skyscraper must be peanuts, right?
Ibuildings - http://www.ibuildings.com
Enterprise development in 10 steps
Tuesday, February 26, 2008 11
Step 1 – The Team
“Dear Mr. Businessman,
I have read about your plans to build a new skyscraper and I am applying for a job.
I have a lot of experience with Bricks. I taught myself how to use them and have been maintaining our family shed for a few years now.”
Tuesday, February 26, 2008 12
Step 1 – The Team
• Be a software engineer
• Train your skills
• Study OO principles
• Consider Zend Certification
Tuesday, February 26, 2008 13
Step 2 - Requirements
• What does the customer need? • What do visitors want?
Tuesday, February 26, 2008 14
Step 2 - Requirements
• Functional Design Requirements definition
Interaction Design / Wireframes
Flow diagrams
Tuesday, February 26, 2008 15
Step 3 - Architecture
• Don’t just start stacking bricks
• Create an architecture first
Tuesday, February 26, 2008 16
Step 3 - Architecture
• Technical Design Modelling
• Class diagrams • ER diagram (data model) • Colaboration diagrams • Use cases • etc.
Tools: UML, whiteboards
Tuesday, February 26, 2008 17
Step 3 - Architecture
• High Level Architectures:
MVC (Model View Controller)
SOA (Service Oriented Architecture)
Multi-tier development (Frontend, Application, Data)
CBD (Component Based Development)
Tuesday, February 26, 2008 18
Step 4 - Tools
• You don’t need tools...
• But they make you productive
Tuesday, February 26, 2008 19
Step 4 - Tools
• Development: Eclipse (PDT) PhpED Vim Zend Studio Komodo
• IDE's vs Editors Debugging Profiling Navigation / cross references Syntax Checking
Tuesday, February 26, 2008 20
Step 4 - Tools
• Source Control CVS / SVN Bitkeeper / GIT
Branching Tagging
Tuesday, February 26, 2008 21
Step 5 - Foundation
• Start stacking bricks? How many bricks does it take.. What about stability?
• Start with a foundation
Tuesday, February 26, 2008 22
Step 5 - Foundation
• Use a framework Provides guidelines (frame) Off the shelf components
• Examples Zend Framework http://framework.zend.com
CakePHP http://http://www.cakephp.org
ezComponents http://ez.no/ezcomponents
Symfony http://www.symfony-project.org
ATK http://www.achievo.org/atk
Tuesday, February 26, 2008 23
Step 5 - Foundation
• The “Not Invented Here” Syndrome
“The existing frameworks are no good. I can do this better.”
“This framework is no good. It can do A through Y but I need Z.”
“This framework is too big. It provides A-Z but we only need A and B.”
“I know there's a good framework. But I would like to learn.”
Tuesday, February 26, 2008 24
Step 6 – Design Patterns
Requirement 1056.4:
We need to be able to look outside, but we can't make holes in the wall (rain should be kept outside). When it's sunny, a hole is ok.
Tuesday, February 26, 2008 25
Step 6 – Design Patterns
• A ‘window’ is a concept Best practice way of solving a particular problem
• In IT, we call this a ‘design pattern’
• Popular patterns in PHP: MVC, Factory, Singleton, Registry, Decorator
• Good read: php|architect's Guide to
PHP Design Patterns - Jason E. Sweat
Tuesday, February 26, 2008 26
Step 7 - Testing
• Is your software tested after it has gone live?
Tuesday, February 26, 2008 27
Step 7 - Testing
• Various types of testing
Developer testing
Functional testing
Environment testing
Performance testing
Usability testing
Tuesday, February 26, 2008 28
Step 7 - Testing
• Common scenario
Tuesday, February 26, 2008 29
Step 7 - Testing
• User complains...
MWOEHA! BUG!
Tuesday, February 26, 2008 30
Step 7 - Testing
• Developer attacks the problem
fix_bug();
Tuesday, February 26, 2008 31
Step 7 - Testing
• Problem solved!
Tuesday, February 26, 2008 32
Step 7 - Testing
• Solution: Unit Tests Automated testing after each change Prevents regressions
• Testing for PHP applications: PHPUnit http://www.phpunit.de/ SimpleTest http://www.lastcraft.com/simple_test.php
• Continuous Integration: CruiseControl with phpUnderControl Xinc http://code.google.com/p/xinc/
Tuesday, February 26, 2008 33
Step 7 - Testing
• Test Driven Development 1. Define functionality 2. Create testcase 3. Run test -> test fails 4. Implement functionality
• Test succeeds? Done • Test fails? Refactor
Repeat step 4 until finished
Tuesday, February 26, 2008 34
Step 8 - Optimization
Users are reporting:
"I work on the 197th floor. Every day I have to walk the stairs for 2 hours, then I
have only 4 hours left to do my job."
Tuesday, February 26, 2008 35
Step 8 - Optimization
• Solution: Elevator
Tuesday, February 26, 2008 36
Step 8 - Optimization
In PHP, this ‘elevator’ is called an ‘accelerator’
This is how PHP works (pseudo-ish code):
read index.php; // enter the building compile index.php; // go to floor 197 echo “Hello World”; // get the job done
An accelerator improves the first 2 steps
Accelerators for PHP: • eAccelerator http://eaccelerator.net/
• APC http://pecl.php.net/package/APC
• Zend Platform http://www.zend.com/products/zend_platform
Tuesday, February 26, 2008 37
Step 8 - Optimization
Users complain:
“Every time I need coffee I have to go to the top floor to get some.”
Tuesday, February 26, 2008 38
Step 8 - Optimization
• Solution: Create small coffee corners on every floor so people don’t have to go to the main restaurant every time.
• In PHP we call this caching Don’t query the database everytime you need data Use locally stored copy (file or memory)
• PHP Caching solutions: Zend_Cache http://framework.zend.com
Smarty http://smarty.php.net
Zend Platform http://www.zend.com/products/zend_platform
Memcached http://danga.com/memcached/
Tuesday, February 26, 2008 39
Step 9 - Deployment
• Lifecycle: Develop Test Deploy to acceptance test environment Deploy to live
• Use SVN
• Code is just a part, don't forget the database
• Create a 'Deployment & Release Profile'
Tuesday, February 26, 2008 40
Step 9 - Deployment
• System Architecture
PHP
Apache
Linux
MySQL
From a simple LAMP stack on a single machine...
Tuesday, February 26, 2008 41
Step 9 - Deployment
• System Architecture
... to a High Availability, Horizontally Scalable architecture
Tuesday, February 26, 2008 42
Step 10 - Operations
• Monitoring Logfiles Monitor infrastructure (tools such as Nagios) Monitor application (tools such as Zend Platform) Monitor business (is the money still pouring in?)
Tuesday, February 26, 2008 43
Step 10 - Operations
• Debugging
Ideal:
“I had error x when I selected y after I clicked z”
Reality:
“It doesn't work!” “What exactly doesn't work, and what did you do?” “It just ******** didn't work, FIX IT.”
Tuesday, February 26, 2008 44
Step 10 - Operations
• Solution
A 'root cause analysis' tool
Tuesday, February 26, 2008 45
Step 10 - Operations
• Change management Ticket system Stick to your deployment - use the DRP
DON'T TOUCH THE LIVE ENVIRONMENT.
But I absolutely have to...
DON'T!
but...
NO! IF YOU TOUCH IT, YOU WILL LOSE ALL GURU POINTS.
46
Shameless self-promotion • php|architect's
Guide to Enterprise PHP Development
• PDF: June 12, Print: June 26
• ISBN: 978-0-9738621-8-8
• Order via http://phparch.com
• http://www.enterprisephp.nl
Ibuildings - http://www.ibuildings.com
Questions?
http://www.jansch.nl http://www.enterprisephp.nl http://www.ibuildings.com