2010.1 – Les fondements d’une nouvelle architecture
Développement, francais, Security, XNova:Legacies, XNova:Next-Gen 24 mars 2010Aujourd’hui, c’est un billet pour les développeurs que je ferais, l’occasion d’introduire la nouvelle architecture de XNova:Legacies et expliquer ses différences avec ce qui a pu exister jusqu’à présent sur le projet. Ce n’est pas inutile de rappeler que les plus grosses évolutions de la prochaine version reposent sur un tout nouveau code source écrit en PHP 5.2, cette version de PHP devient donc désormais un prérequis pour faire fonctionner XNova:Legacies, mais rassurez vous : cette version date de 2006, la très large majorité des hébergeurs PHP la supportent depuis longtemps.
Pour revenir à ce qui nous anime ici, tout a été repensé pour faciliter la modification rapide et simple du fonctionnement du jeu sans toucher 1 seule ligne du code source original. Tout se passe dans la configuration : si une fonctionnalité du code source de base ne nous plait pas : on la remplace, c’est aussi simple que ca.
Accéder à des données provenant de la base de données n’a jamais été aussi simple et aussi sûr : on récupère un ID, et on charge notre modèle, et tout ca sans aucun risque d’injection SQL. Mais comment modifier, créer ou supprimer un enregistrement? une ligne suffit! Pour la sortie du preview 2010-alpha0, seul le module User sera terminé. Il est relativement simple et pourra donc servir à la fois d’étalon et de benchmark pour tout ce qui suivra : 90% de ce nouveau code source sera commun à une très large majorité de fonctionnalités ou de refontes futures.
Mais tout ca fait beaucoup de paroles et peu d’exemples, donc voici quelques avant-goûts (soumis peut-être à modification dans la version finale) :
Chargement et modification des données d’un joueur quelconque depuis la base de données :
Pour charger les données d’un joueur ayant, par exemple, l’ID 8 dans la base de données, le code suivant est suffisant :
$user = Nova::getModel('user/user')->load(8);
La suite? utilisez la variable nouvellement créée (ici, $user) et utilisez la comme un tableau, comme vous le faisiez jusqu’à présent… ou presque. Oui, parce qu’aujourd’hui ce n’est plus un tableau, mais un objet. La différence? et bien c’est qu’aujourd’hui, mon $user a gagné des accesseurs et des mutateurs virtuels et il sait même comment aller enregistrer ses données tout seul dans la base de données !
$user
->setEmail('joueur@example.com'); // modification du champ 'email'
->setUsername('Joueur') // Modification du champ 'username'
->save();
Oui, tout ca, c’est bien beau, mais j’aimais bien avant!
Pas de panique! notre $user garde les apparences et peut toujours être utilisé comme avant :
echo $user['username'];
Mais on ne s’arrête pas à un simple changement de syntaxe!
Oui, plutôt que d’avoir des fonctions un peu partout, de ne plus savoir où se trouvent telle ou telle fonctionnalité, pourquoi ne pas tout regrouper à un seul endroit? eh bien, c’est que nous faisons dès maintenant! Par exemple : pour gérer la connexion d’un joueur, pourquoi ne pas créer un mécanisme automatisé?
$user = Nova::getModel('user/user');
if ($user->login($_POST['username'], $_POST['password'])) {
// Notre utilisateur s'est bien connecté avec le bon mot de passe
} else {
// Un problème est survenu, peut-être une erreur dans le mot de passe?
}
Oh, mais comment récupérer l’utilisateur courant maintenant? Simple! Les sessions nous viennent en aide et ont elles aussi été améliorées :
$user = Nova::getSingleton('user/session')->getUser();
On retrouve maintenant notre $user, celui qui s’est connecté dans l’exemple précédent.
Et on va encore plus loin!
Développez et débugguez vos anciens mods ou développez des modules pour Legacies en activant les modes Debug et Deprecation et utilisez le profileur de code source, des outils simples et pratiques pour optimiser votre code.
Dans votre .htaccess, ajoutez les lignes suivantes pour activer les deux modes cités plus haut :
SetEnv DEBUG On
SetEnv DEPRECATION On
Le profileur de code source, lui sert à calculer le temps que prendra un traitement, il vous retournera le nombre de fois que ce traitement est effectué, et différentes statistiques de temps d’exécution. Il s’utilise avec les deux méthodes statiques Nova::profilerStart() et Nova::profilerStop(), respectivement pour démarrer un compteur et l’arrêter. Elles prennent toutes les deux un seul argument qui identifiera le compteur :
Nova::profilerStart('NOVA.EXAMPLE');
// Le traitement à étudier commence ici
for ($i = 0; $i < 200000; $i++) {
echo 'Hello world';
}
// et se termine là
Nova::profilerStop('NOVA.EXAMPLE');
Notez que le profiler n'apparaîtra qu'en mode debug.

24 mars 2010 à 14 h 00 min
j’ai hâte de pouvoir tester cette nouvelle version
24 mars 2010 à 23 h 56 min
wé pareil
vivement d’en voir le bout
25 mars 2010 à 16 h 21 min
optimisations, sécurités… sa sent bon tout ça
3 mai 2010 à 19 h 18 min
Salut,
une date ? sa commence à faire long
5 mai 2010 à 14 h 37 min
Comme d’habitude, ca viendra quand ca arrivera. Le module “core” vient de sortir officiellement, le reste suivra très rapidement.
25 septembre 2010 à 10 h 11 min
Bonjour, je voit que ca fait un moment que la version 2010.1 doit sortir … Des chances pour que ce soit encore cette annee ?
23 décembre 2010 à 12 h 32 min
J’ai bien peur que ce soit pas pour cette année… Dommage, beaucoup l’attendaient cette version :/