Favoriser l’industrialisation

de ses développements WordPress grâce à la POO

Par Thomas DENEULIN / @TDeneulin au WordCamp Paris 2016

Qui suis-je ?

YurPlan WP GoD

WordPress

Evolue vite (fonctionnalités, communauté)

Laisse beaucoup trop de libertés

WordPress

Few months later...

On écrit du code pour les ordinateurs

mais aussi

Pour les humains

Du procédural vers l'Objet

Il était temps, car l'objet ne date pas d'hier

1970

PHP : 2004

C'est facile

En réalité, voici ce que l'on vient de voir

SOLID

  • Single Responsability
  • Open / Closed
  • Liskov Substituion
  • Interface Segregation
  • Dependency Injection

Mais surtout, restons simple

KISS

Industrialisons nos développements

Atomisons les comportements

Et pensons service

Mon service
est indépendant !

Single Responsability
Il ne sait faire qu'une chose

Open / Closed
Je le laisse tranquille quand il marche

Liskov Substituion
Si on l'améliore, on ne change pas toute la logique

Interface Segregation
Je lui force des conventions

Dependency Injection
Je lui donne ce dont il a besoin pour travailler

Si on retourne en arrière

Maintenant

Dans WordPress,
ça donne quoi ?

Nous devons affronter au préalable quelques problèmes

Problème N°1

"Avec la POO, je me retrouve avec 50 fichiers... 50 require ?!"

Namespace, Composer, Autoloader

C'est pas pour les kiwis

Un namespace

Un composer et une commande

Et faites en bon usage

Problème N°2

"Je ne sais jamais quand instancier mes class. Autant faire du static ou tout mettre dans un constructeur"

On a parlé service

Parlons Service Container

On va instancier ce dont on a besoin, à la volée

Avant

Après

Problème N°...

Plus de problèmes !

Pensez aux designs patterns

Et conceptualisez vos services

"Je veux exporter mes Custom Post Type dans un JSON"

Strategy

Oui, on peut en avoir besoin

"Je veux avoir des règles de gestion"

Specification

Oui, on peut en avoir besoin

Architecture conseillée

Aussi bien objet que dossier

Les interfaces indispensables

  • HooksInterface (ou iHooks, ou Hooksable)
  • HooksFrontInterface
  • HooksAdminInterface
  • ActivationInterface
  • DeactivationInterface
  • OrderInterface

Le reste, c'est pour vous !

Mes dossiers

  • MonNamespace
    • Entity
    • Models (interface)
    • ... (Handler, Services, ...)
    • Widgets
    • WordPress (logique WP)
      • Admin
      • Shortcodes
      • ...
      • Widgets

Maintenant
ne copiez / collez plus du code.
Utilisez vos services

C'est comme implémenter une librairie !

A la manière d'un starter thème :)

Ressources

Merci à tous !

Je reste disponible après la conférence pour aller plus loin et vous montrer du code source.