MVC = Make Venerated Code?

download MVC = Make Venerated Code?

If you can't read please download the document

description

Presentation done on February the 18th on the MVC pattern at the first event of PHPBelgium in Liège. The idea was to transform a simple spaghetti application into a well structured, MVC-aware and framework-free application with nice URL just using regular PHP and Apache's configuration.

Transcript of MVC = Make Venerated Code?

  • 1. PHPBelgium event 18-02-2009MVC = Make Venerated Code?Patrick AllaertPHPBelgium Belgian PHP community http://www.phpbelgium.be/

2. About Me Started developping using PHP 3 Ten years of FOSS evangelism Contribute to different FOSS: Tabellio (Open Source Collaboration for assemblies) Xoof (eXtensible Open Object Oriented Framework) KDESvn (Subversion frontend for KDE) PHP (ext/ldap) APM lead developer (Alternative PHP Monitor) Working @ AUSY PHPBelgium staff member Blog: http://patrickallaert.blogspot.com/ Twitter: http://twitter.com/patrick_allaertPHPBelgium Belgian PHP community http://www.phpbelgium.be/ 3. Model-View-Controller (1) is an architectural pattern used in softwareengineering. Successful use of the patternisolates business logic from user interfaceconsiderations, resulting in an applicationwhere it is easier to modify either the visualappearance of the application or the underlyingbusiness rules without affecting the other. WikipediaPHPBelgium Belgian PHP community http://www.phpbelgium.be/ 4. Model-View-Controller (2)Model DB Requests Controller(X)HTMLViewXML PHPBelgium Belgian PHP communityhttp://www.phpbelgium.be/ 5. Design of some PHP applications PHPBelgium Belgian PHP communityhttp://www.phpbelgium.be/ 6. Managing this is sometimes...very difficult...PHPBelgium Belgian PHP community http://www.phpbelgium.be/ 7. Demo application /index.php /team.php?id=PHPBelgium Belgian PHP communityhttp://www.phpbelgium.be/ 8. Spaghetti code PHPBelgium Belgian PHP communityhttp://www.phpbelgium.be/ 9. Taking the Business Logic apart (1) PHPBelgium Belgian PHP communityhttp://www.phpbelgium.be/ 10. Taking the Business Logic apart (2) PHPBelgium Belgian PHP communityhttp://www.phpbelgium.be/ 11. Taking the Business Logic apart (3) PHPBelgium Belgian PHP communityhttp://www.phpbelgium.be/ 12. Evaluating the situation Model is reusable Views tightly linked to Changes to thethe modelbusiness logic doesViews impacted if thenot require inspecting API of the modelall fileschange Calls to the model may be difficult to find: spread everywhere in viewsPHPBelgium Belgian PHP community http://www.phpbelgium.be/ 13. On the path to MVC (1) PHPBelgium Belgian PHP communityhttp://www.phpbelgium.be/ 14. On the path to MVC (2) Directory views to be added in the include_path View parameters are passed using global variables Hint: $variableName may also be written: $GLOBALS['variableName'] The latest form may be used to differentiate variables defined by the controller file from the local view variables htdocs could be renamed controllers PHPBelgium Belgian PHP communityhttp://www.phpbelgium.be/ 15. Howto: Clean URL Clean URL: Transforminghttp://example.com/index.php?type=article&id=25&date=20020322into:http://example.com/article/200203226 Enables better search engine indexing URIs are not supposed to change (Cool URIs don't change) Doesn't expose the server-side language Most MVC Frameworks provide clean URL mechanism, how to setup one with our structure?PHPBelgium Belgian PHP community http://www.phpbelgium.be/ 16. Clean URL: method #1 Using Apache's mod_rewrite:RewriteEngine OnRewriteRule ^/team/([0-9]*)$ /team.php?id=$1 [L]Ability to transform URLs on the fly and mappingpart of the URL directly to a $_GET variablePHPBelgium Belgian PHP communityhttp://www.phpbelgium.be/ 17. Clean URL: method #2 Dropping the .php extension and forcing themime-type/handler used in the Apacheconfiguration ForceType application/x-httpd-php or:SetHandler application/x-httpd-php PHPBelgium Belgian PHP communityhttp://www.phpbelgium.be/ 18. Performance impact (index page) Concurrency 1 15spaghetti 1483.15 2798.23Model-View1353.17 2388.61MVC 1339.72 2364.66Clean URL #11320.61 2303.99Clean URL #21412.43 2468.83Zend Framework 164.11 280.22In requests/second, higher = betterPHPBelgium Belgian PHP communityhttp://www.phpbelgium.be/ 19. Performance impact (team page) Concurrency 1 15spaghetti 1372.66 2428.79Model-View1243.78 2142.79MVC 1235.48 2364.66Clean URL #11232.39 2090.51Clean URL #21192.78 2040.44Zend Framework158.77264.65In requests/second, higher = betterPHPBelgium Belgian PHP communityhttp://www.phpbelgium.be/ 20. Questions ? PHPBelgium Belgian PHP communityhttp://www.phpbelgium.be/ 21. Thanks :-) These slides will be available through: http://patrickallaert.blogspot.com/PHPBelgium Belgian PHP community http://www.phpbelgium.be/ 22. License This presentation material is published under the Creative Commons Attribution-Share Alike 3.0 Unported license. You are free: to Share to copy, distribute and transmit the work to Remix to adapt the work Under the following conditions: Attribution You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work). Share Alike If you alter, transform, or build upon this work, you may distribute the resulting work only under the same, similar or a compatible license. With the understanding that: Waiver Any of the above conditions can be waived if you get permission from the copyright holder. Other Rights In no way are any of the following rights affected by the license: Your fair dealing or fair use rights; The author's moral rights; Rights other persons may have either in the work itself or in how the work is used, such as publicity or privacy rights. Notice For any reuse or distribution, you must make clear to others the license terms of this work.PHPBelgium Belgian PHP communityhttp://www.phpbelgium.be/