Modifier

Projet didactique : 2048

Jeu 2048

Connaissez-vous :

  • clean code ?
  • la clean architecture ?
  • TDD ?
  • ATDD ?

Si vous avez répondu non à l'une de ces questions, je vous invite à étudier ce petit projet que j'ai développé en WinDev® 23.

Pourquoi ce projet ?

Je souhaitais depuis quelques temps écrire une série d'articles sur comment réaliser un projet en appliquant les principes énoncés plus haut. Le fil conducteur de ces articles aurait été la création d'un 2048.

Je n'ai pas écrit les articles, mais j'ai réalisé le projet et j'en suis vraiment satisfait. Je sais que je peux encore l'améliorer, mais voici le genre de code que je veux écrire pour chacun de mes projets.

Et ça n'a aucune valeur, mais j'aime voir ces statistiques dans mes projets :

Statistiques du code 2048

Télécharger le projet WinDev 23

La méthode

Clean code

Clean code est une technique de programmation qui vise à produire un code propre.

Voici quelques caractéristiques :

  • Des procédures courtes
  • Du code auto-documenté (très peu de commentaires)
  • Du code explicite

Clean architecture

Cette architecture permet de séparer le code métier des autres concepts (seulement l'IHM dans mon exemple) et ça rend vraiment le code très propre. Il est plus simple à faire évoluer.

La clean architecture met bien en évidence l'utilité des interfaces. Ce code est un excellent exemple d'utilisation des interfaces.

TDD et ATDD

ATDD

J'ai utilisé ATDD (ou test d'acceptance) pour me donner une trame pour créer le projet. J'ai imaginé le design du code que je souhaitais (sans me soucier s'il convenait ou non). Pour cela, j'ai écrit un scénario qui me permettrait de mettre en place les différentes règles métiers que mon application doit avoir.

Puis j'ai exécuté ce scenario. Il a planté directement... Pourquoi ?

Tout simplement parce que la première ligne de code référençait une classe qui n'existait pas encore. J'ai donc procédé à la création de chacune des classes et méthodes nécessaires.

J'ai réexécuté le scénario. Il a planté de nouveau... Pour quelle raison ?

Parce que je n'avais pas encore implémenté le code des classes et des méthodes. Et donc, pour chaque erreur qui s'affichait dans mon scénario, j'ai utilisé ...

TDD

Quand mon scénario plante, cela peut signifier trois choses :

  • la classe ou la méthode n'existe pas ;
  • la classe ou la méthode n'a pas d'implémentation ;
  • la classe ou la méthode bug.

A cette étape du projet, c'est le deuxième cas qui est rencontré. Je n'ai pas encore d'implémentation. J'ai donc utilisé TDD pour définir les spécifications de mon implémentation.

Grâce à TDD, je ne suis jamais tombé dans le 3eme cas.

Télécharger le projet

Je vous invite vivement à étudier ce code. Les concepts qu'il aborde sont très intéressants. Il est léger (moins de 1300 lignes) et vous pourrez même jouer avec.

Télécharger le projet WinDev 23

C'est à vous de jouer !

C'est un exemple et il n'est pas terminé. Il manque plusieurs choses :

  • le jeu ne détecte pas la fin d'une partie ;
  • le jeu ne calcule pas le score ;
  • on ne peut pas changer la taille d'une grille ;
  • on ne peut pas modifier les règles (utiliser la suite de fibonnaci par exemple) ;
  • on ne peut pas sauvegarder une partie.

Si vous le souhaitez, je vous propose un petit jeu. Essayez de mettre en place l'une de ces fonctionnalités en respectant les concepts déjà abordés.

Voici les étapes :

  • vous devez mettre en place un test d'acceptance (ATDD) qui sera rouge ;
  • vous devez ensuite faire passer ce test d'acceptance au vert en utilisant TDD ;
  • vous devez mettre en place la nouvelle fonctionnalité dans l'IHM ;
  • vous devez respecter clean code ;
  • vous devez respecter la clean architecture.

Pour les 10 premiers qui veulent s'y essayer, vous gagnerez un mois d'abonnement gratuit à mon nouveau service : entraineur de codeur. Cet exercice sera le premier que vous effectuerez.

Pour en savoir plus, vous pouvez lire l'article Nouveau service : Entraineur de codeur

Merci pour votre lecture et à bientôt sur le forum !

Article suivant Article précédent

Blog Comments powered by Disqus.