Voici ma pensée, et je pourrais me creuser un énorme trou. C'est la raison pour laquelle je suis là ;)
Je cherche à développer une application complexe, mais je veux que cette application s'exécute à la fois en tant que script autonome et en tant que plugin wordpress. Plus tard, je pourrai devenir un plugin Joomla, etc.
Je pense que je développe un framework personnalisé abstrait, puis que je mette en œuvre la fonctionnalité personnalisée via l'extension de ce framework. Cela a-t-il du sens?
Alors dites: WP_Plugin
étend My_Engine
, et ensuite cette classe de plug-in agira comme une usine pour gérer la fonctionnalité personnalisée dans le répertoire WordPress /lib/wordpress/
.
Je ne veux vraiment pas avoir à me répéter et je produirais certainement plusieurs versions de l'application.
Des pensées?
Pour ce faire, je construirais votre application autonome en y intégrant une API à l'épreuve des balles qui permettrait aux autres et à vous-même de tirer parti de la puissance de votre application.
Quelle que soit la façon dont vous le regardez, il y aura une bonne quantité de codage à faire chaque fois que vous visiterez un CMS différent, car ils ont tous des façons différentes de gérer les choses. Si votre application dispose de bons contrôles d'API, d'autres utilisateurs pourraient créer leurs propres modules pour d'autres CMS dont vous ne saviez jamais qu'ils existaient. Par conséquent, ne vous limitez pas à WordPress et à Joomla.
L'extension via le sous-classement est possible, mais cela pourrait limiter vos possibilités. Peut-être souhaitez-vous autoriser un développeur tiers à étendre My_Engine
en tant que My_Super_Engine
, mais WP_Plugin
n'utiliserait toujours que My_Engine
.
Au lieu de cela, vous pouvez faire en sorte que WP_Plugin
contienne une référence à un objet concret My_Engine
. Ceci est parfois appelé "has_a
à la place ou relation is_a
" (WP_Plugin
n'est plus de type My_Engine
, mais il contient une référence à My_Engine
à la place) ou "Injection de dépendance" (lorsque vous instanciez votre WP_Plugin
et , injectez la dépendance sur My_Engine
au lieu de le coder en dur à l'intérieur).
Pour donner une réponse plus détaillée, il peut être utile d’avoir plus d’informations sur ce que votre application est censée faire. Combien pouvez-vous découpler l'interface utilisateur de la logique d'application? Ce sera probablement le principal obstacle à la portabilité de l'application principale vers d'autres environnements.