36
WordPress Code Architecture Mario Peshev @no_fear_inc WordPress Engineer DevWP.eu

WordPress Code Architecture

Embed Size (px)

DESCRIPTION

WordPress Code Architecture - revising the code architecture of the WordPress CMS and comparing it to the design patterns and core decisions in other CMS and frameworks based on PHP, Python, Ruby, Java and C#.

Citation preview

Page 1: WordPress Code Architecture

WordPress Code

Architecture

Mario Peshev @no_fear_inc

WordPress Engineer DevWP.eu

Page 2: WordPress Code Architecture

Agenda

• Leading Factors

• Frontend

• Backend

• Users

• Database

• Helpers (Forms, etc)

• Others

Page 3: WordPress Code Architecture

Mario Peshev

• WordPress Architect @ DevriX

• Former Java/PHP/Python Developer

• WordPress Ambassador

at SiteGround

• @no_fear_inc

• Open Source addict and Cofficer

Page 4: WordPress Code Architecture

Personal opinion about different platforms out there

No flame wars intended

Page 5: WordPress Code Architecture
Page 6: WordPress Code Architecture

Leading Factors

• PHP – most widespread across hosting

vendors

• Inspiration from predecessor (b2/cafelog),

different from Rails and MVC-frameworks

• PHP 5.2.4 support in Core

• LAMP/LEMP stack

Page 7: WordPress Code Architecture

Main Differences

• PHP is stateless and single-threaded

• Default stack: Apache + PHP + MySQL

• No MVC or complete OOP support

• Framework out of a CMS (and not vice

versa)

• No non-traditional data storage layers

• No REST support in core (until 4.0)

Page 8: WordPress Code Architecture

PHP 5.2.4 support

Supporting 5.2.4 means that we can’t use:

• namespaces

• traits

• Class::{expr}()

• Late Static Binding

• Closures (Anonymous functions)

• Dynamic access to static methods

Page 9: WordPress Code Architecture

Frontend

Page 10: WordPress Code Architecture
Page 11: WordPress Code Architecture

Layouts and Views • Some MVC frameworks such as CakePHP:

Page 12: WordPress Code Architecture

Razor View (ASP.NET)

Page 13: WordPress Code Architecture

AJAX

Similar to ng-model/ng-bind in AngularJS

Page 14: WordPress Code Architecture

Backend

Page 15: WordPress Code Architecture

WordPress Backend

• Flexible default admin panel

• Complete views and listings for post types

• User management and capability control

• Settings, Media manager and much more

• Reusable WP_List_Table Components

Page 16: WordPress Code Architecture

Alternative Admins

Different Admin approaches for every

popular CMS

• Scaffolded admin panels from web

frameworks

• Admin components and user management

extensions

Extensibility vs. Complexity Dilemma

Page 17: WordPress Code Architecture

Data APIs

• Wrappers and facade across post types

• Unification in options –

add_option, set_theme_mod,set_transient

• Automatically serializing complex objects

• Verifying for new records

• Sanitizing data

Page 18: WordPress Code Architecture

Drupal Entity API You define your data types with most MVC frameworks. Drupal has the Entity API:

Page 19: WordPress Code Architecture

Environment

Page 20: WordPress Code Architecture

Default Infrastructure

• These are not available as separate modules/components.

Page 21: WordPress Code Architecture

Hooks and DI

• Actions and Filters in WordPress

• Annotations and Attributes in other languages and platforms

Streamlined vs. Layer-based application life cycle model

Page 22: WordPress Code Architecture

JSF Annotations

Page 23: WordPress Code Architecture

PHP has some, too!

Doctrine:

Page 24: WordPress Code Architecture

Database

Page 25: WordPress Code Architecture

Database

• Post Type API base

• *_Query helper classes

• wpdb class

• Other helper CRUD functions

Page 26: WordPress Code Architecture

Challenges with Databases • Normalization vs. Denormalization

• Data Decoupling

• Data storage choices:

Page 27: WordPress Code Architecture

LINQ or even NoSQL

Page 28: WordPress Code Architecture

Helpers and Utilities

Page 29: WordPress Code Architecture

Forms

• Token generation

• Model-based validaiton

• Unified access control

Page 30: WordPress Code Architecture

Hopes for the Settings API

Page 31: WordPress Code Architecture

Media Uploader and /uploads • Media uploader – wp-content/uploads for

private documents

Page 32: WordPress Code Architecture
Page 33: WordPress Code Architecture

Other Areas

• User Management

• Multisite support

• Tools and Libraries

• Routing

• Performance

• Security

• Packages and [Distributions]

Page 34: WordPress Code Architecture

Summary

• WordPress is still AWESOME

• There are just other ways to build an architecture

• Other languages and platforms have their own strong sides too

Page 35: WordPress Code Architecture

Questions?

Tweets as @no_fear_inc

Mario Peshev on LinkedIn

nofearinc on WordPress.org

GitHubering via mpeshev

DevWP.eu - blog

Page 36: WordPress Code Architecture

Notes

• Take a look at ExoWP

• Definitely watch To OOP or not to OOP