Au niveau apparence et fonctionnalité, Cinejeu 2 n'a pas avancé d'un pouce depuis juillet... et pourtant je bosse pas mal dessus !
En fait, une fois que j'ai réussi à concevoir un petit bout de programme qui marche (voir la démo), j'ai tout arrêté pour optimiser la structure de mon code (optimiser sur le plan de la facilité de programmation). J'ai pas mal avancé sur cette restructuration mais il reste encore quelque petites choses.
Pour donner une idée de la raison pour laquelle je passe tant de temps à structurer mon code, je vais donner un petit exemple (qui est loin d'être isolé).
Lorsque je veux inscrire un joueur qui appartient à un certain utilisateur ($user, variable complexe), qui a un certain nom ($name, simple texte) et qui a une certaine somme de départ ($money, qui est un nombre et une unité : euro, dollar, etc.), traditionnellement, je devrais écrire ce genre de ligne :
- Code : Tout sélectionner
mysql_query("
INSERT INTO cj_partie_player SET
user_id='{$user->getId()}',
name='$name',
money_int='{$money->toInt()}'");
Les possibilités d'erreurs lorsqu'on écrit ce genre de lignes sont nombreuses, il faut :
1. penser à mettre les guillemets simples
' ' aux bons endroits
2. mettre les accolages
{} aux bons endroits
3. se souvenir de la terminaison
_id du champ lié aux utilisateurs
4. se souvenir de la terminaison
_int du champ lié à l'argent
5. se souvenir d'utiliser l'identifiant de la variable $user (et non la variable elle-même, comme pour $name)
6. se souvenir du nom de la méthode
getId qui donne l'identifiant d'un utilisateur
7. se souvenir d'utiliser la valeur numérique de la variable $money
8. se souvenir du nom de la méthode
toInt qui donne la version numérique de l'argent
9. se souvenir du nom de la table
cj_partie_player10. se souvenir de la syntaxe SQL pour les ajouts de ligne
Si on peut assez facilement contourner certains de ces problèmes (6, 8 et 9), les autres demeurent et ajouter la moindre ligne de code à son programme peut relever du vrai casse-tête (relecture d'un exemple pour aider à se souvenir ce qu'il faut faire, débuggage pénible, etc.).
Surtout, il est très difficile de faire des programmes vraiment complexes avec cette approche parce que les lignes de code deviennent vraiment très compliquées (bien plus compliquées que ci-dessus). D'où l'arrêt du développement de Cinéjeu 1.x.
Pour faire un Cinéjeu 2.x qui doit être capable de s'étendre et s'enrichir davantage que Cinéjeu 1.x, j'ai été amené à construire mes propres outils qui me permettent d'écrire la ligne de code ci-dessus sous cette forme :
- Code : Tout sélectionner
$this->insert(
new DBSet(
$this->user->set($user),
$this->name->set($name),
$this->money->set($money));
Cette ligne a l'air aussi grosse que la ligne d'origine, sauf que si vous l'examinez bien (et que vous connaissez un peu PHP...), vous remarquerez qu'elle est moins compliquée. Par exemple l'utilisateur (user), le nom (name) et l'argent (money) sont traités exactement pareil alors que ce sont des concepts de nature différente. Et puis il n'y a plus toutes ces histoires de guillements et d'accolades.
En fait vous pouvez constatez que
toutes les difficultés recensées ci-dessus sont évacuées...
Sans compter sur le fait que pratiquement tous les mots ci-dessus ('insert','user','name', etc.) vont pouvoir être (bientôt*) proposées automatiquement au programmeur, ce qui fait que je n'aurai qu'à taper les lettres en gras :
$this->insert(
new DBSet(
$this->user->set($user),
$this->name->set($name),
$this->money->set($money));
Les risques d'erreur deviennent minimes et on est pratiquement assuré de taper du premier coup d'une ligne de code valide. Ca permet de se concentrer sur la
vraie complexité du programme : vais-je permettre à un utilisateur d'avoir plusieurs comptes ? etc.
Le plus beau c'est que ce que j'ai écrit est largement généralisable et je le mettre à disposition pour d'autres programmeurs. Il s'agit en fait d'un petit framework (je n'ai trouvé aucun framework PHP gratuit d'aussi haut niveau que ce je fais. Plus riche oui, mais toujours très bas niveau)
* si Eclipse PDT évolue vite...