Un duel n’est intéressant que si les 2 adversaires sont comparables, et il se trouve que techniquement PrestaShop et Oxid eSales sont deux solutions aux socles techniques très semblables.
Oxid eSales est une solution e-Commerce très répandue en Allemagne et dans le reste du monde (40.000 sites en production) et on ne présente plus PrestaShop, plus de 125.000 boutiques dans le monde générant un CA cumulé de plus 30 millions de dollars…
Avant le comparatif, le contexte : je vais vous expliquer ici pourquoi il est pertinent de comparer techniquement ces 2 solutions, en prenant point par point les éléments communs.
Note de l’auteur
Ce comparatif a été réalisé à partir mon expérience personnelle. En tant qu’expert technique à l’e-Commerce Academy, j’ai l’opportunité d’appréhender tous les aspects techniques qui caractérisent les différentes solutions, tant sur Oxid eSales que sur PrestaShop, et d’identifier les similitudes.
[toc ordered_list= »false »]
1. Contexte du duel de technos
1.1 Même socle PHP/MySQL
Oxid eSales et PrestaShop sont deux solutions basées sur le couple PHP/MySQL.
1.2 Toutes 2 implémentent un pattern MVC
Couche Controller
La couche controller PrestaShop se trouve dans les dossiers controllers/[admin|front] et est pilotée par les classes mères : FrontControllerCore, AdminControllerCore et Controller (pour les controllers) et DispatcherCore pour le routage.
La couche controller Oxid se trouve dans les dossiers views et admin et est pilotée par les classes mères : oxUBase, oxAdminView (pour les controllers) et oxShopControl pour le routage.
On retiendra de ces deux couches controller, que tous les fichiers sont dans les mêmes dossiers et que les implémentations sont toutes deux faites maison, aucun framework n’est utilisé et les fonctions utilitaires de l’un et l’autre se ressemblent peu ou prou.
Couche Modèle
La couche Modèle PrestaShop se trouve dans le dossier classes et est pilotée par la classe Mère ObjectModel, et la couche d’accès aux données dans le dossier classes/db
La couche modèle Oxid se trouve dans le dossier core et est pilotée par oxBase et oxList. Elle utilise une petite librairie adodblite pour la couche d’accès aux données.
On retiendra de ces deux couches modèles quelles sont aussi faites ‘maison’ et que tous les fichiers de modèles sont dans un dossier commun.
Couche Vue
- Couche Vue PrestaShop : Utilisation de smarty
- Couche Vue Oxid : Utilisation de smarty également
On retiendra de ces couches vues, que toutes deux utilisent le même moteur de template, avec des templates associés rangés dans des thèmes.
1.3 Ajout de fonctionnalités
Les deux solutions permettent d’ajouter de nouvelles fonctionnalités (extensions) à la plateforme existante et toutes deux implémentent des mécanismes permettant de modifier les fonctionnalités natives du noyau sans modifier le contenu du core.
A ce niveau nous avons assez de points pertinents de comparaison pour détailler point par point lequel est le mieux implémenté et/ou le plus robuste dans ses choix d’implémentations.
Au 13 décembre 2012, le comparatif sera effectué sur les versions suivantes :
- 1.5.2 de PrestaShop
- 4.6.3 de Oxid CE
Je ne m’appuierai pas sur cet article sur ce qui pourrait sortir dans les prochaines versions, les 2 solutions ont évidemment des roadmap techniques.
2. Comparatif Oxid eSales vs. PrestaShop
2.1 Couche Controller
Petit rappel : la couche controller d’une application web a trois rôles majeurs :
- Routage de la requête HTTP
- Exécution d’une action (potentiellement faire appel au modèle et/ou à la vue)
- Renvoyer une réponse HTTP au navigateur (réponse 200, avec du html, JSON, xml, ou 30[X] : redirections)
Oxid eSales : Couche Controller |
![]() Au niveau de l’exécution des controllers, quelques soucis dans Oxid par rapport à une implémentation plus carrée style ZF :
Toutefois le découpage est bien fait et avec le mécanisme de routage vu ci-dessus, cela laisse quand même pas mal de souplesse si l’on veut implémenter quelque chose. |
Oxid eSales vs. PrestaShop
Bilan sur la couche ControllerJe mettrai les 2 couches controllers de ces solutions à égalité en tenant compte du fait que l’implémentation de Oxid semble plus robuste car elle est en place depuis de nombreuses versions, alors que pour PrestaShop c’est en place depuis la version 1.5 seulement.
2.2 Couche Modèle
Petit rappel : la couche modèle d’une application a deux rôles majeurs :
- Implémentation de traitement métier
- Interfaçage entre le support physique de données (ex BDD, fichier xml), et le contexte applicatif en mémoire (objet si c’est de la POO, tableau et variable pour du procédural)
PrestaShop : Couche Modèle |
La couche model de PrestaShop se trouve dans le dossier classes/ et ne contient qu’une partie : une implémentation d’entité étendant d’ObjectModel.On peut faire le même reproche à PrestaShop qu’à Oxid sur la couche DAO.
Par ailleurs, le fait de ne pas avoir implémenté de mécanisme de gestion de collection génère des problèmes. D’une part, il n’y a pas vraiment de convention de nommage à ce niveau (par exemple, ProductCore::getProducts (en statique), CategoryCore::getCategories (en statique)). D’autre part, plus embêtant si l’on doit implémenter une nouvelle entité, il faudra aussi implémenter son mécanisme de récupération de collection qui n’est pas fourni en standard. Encore un défaut, on constate que le mapping entre les attributs d’objets et les champs des tables, doivent s’implémenter dans le code : problème donc si l’on modifie la structure d’une table. |
Oxid eSales vs. PrestaShop
Bilan sur la couche ModèleUn point pour Oxid pour l’implémentation de sa couche modèle.
2.3 Couche Vue
Petit rappel : la couche vue d’une application a deux rôles majeurs :
- Présentation des données
- Mise en page
PrestaShop : Couche Vue |
Comme déjà dit, PrestaShop utilise Smarty comme moteur de template à l’instar de Oxid.Le dossier thème utilisé par défault pour PrestaShop est default (il se trouve dans le dossier themes/default).De bonne choses sont à signaler :
En revanche quelques points négatifs :
|
Oxid eSales vs. PrestaShop
Bilan sur la couche VueBien que je n’aime pas du tout le fait de ne pas utiliser de layout, je vais mettre PrestaShop et Oxid à égalité pour l’implémentation de leur couche vue.
2.4 Installation de modules et modification du comportement
Alors là, les 2 solutions vont se targuer techniquement d’être des plateformes modulaires et vont présenter les nouvelles implémentations comme des « modules ».
On va jouer un peu sur les mots mais dans la notion de modules, il y a l’idée de composant, avec une notion d’autonomie et d’indépendance de ces composants les uns par rapport aux autres. Or on l’a bien vu, le fait que toutes les classes sont dans un seul dossier et qu’il y a des dépendances de certaines entités jusque dans les classes mères (ex : cart que l’on trouve dans FrontControllerCore pour PrestaShop et dans oxuBase pour Oxid) me fait dire que ni l’une ni l’autre ne sont des plateformes modulaires. Elles sont cependant extensibles et disposent de mécanismes permettant de modifier le comportement natif sans toucher le code du noyau.
Oxid eSales : Installation de modules et modification du comportement |
D’après la documentation officielle d’Oxid à ce sujet il est possible de :
Dans la pratique on regrettera :
|
PrestaShop : Installation de modules et modification du comportement |
D’après la documentation officielle de PrestaShop à ce sujet il est possible de :
Dans la pratique on regrettera :
|
Oxid eSales vs. PrestaShop
Bilan sur l’installation de modules et la modification du comportement
Un point sur cette partie pour Oxid grâce à son système de chainage d’héritage.
3. Conclusion
Voici les résultats bruts de ce qui vient de découler.
Oxid eSales (4.6 C.E.) | PrestaShop (1.5.2) | |
Couche Controller | 1 | 1 |
Couche Modèle | 1 | 0 |
Couche Vue | 1 | 1 |
Installation de modules et modification du comportement | 1 | 0 |
Total | 4 | 2 |
À mon sens le meilleur résultat technique d’Oxid vient du fait que c’est une solution qui est mature depuis plus longtemps que PrestaShop (profondément transformé depuis la sortie de la version 1.5).
Oxid est donné vainqueur sur ce duel mais il ne faut pas oublier que :
- Tous les aspects techniques n’ont pas été abordés (exemples : modélisation des données en base, gestion des webservices, …)
- Ce comparatif ne représente que les aspects techniques.
Un duel fonctionnel entre ces deux solutions est nécessaire et fera l’objet d’un prochain billet.
Affaire à suivre ! En attendant, vos questions sont les bienvenues.