mardi 17 juin 2008

développement agile et bonnes pratiques sur RoR

En programmation comme en toute chose un esprit rigoureux, une organisation claire du travail et le respect des délais sont les maîtres mot de votre réussite. A travers de courts tutoriaux, je vais tenter de poser les bases de la mise en place d'un environnement de travail et d'une méthodologie de travail qui vous feront gagner de précieuses heures et vous sauveront même carrément la mise dans bien des cas.

Pour l'exemple et parce que c'est exactement ce que je suis en train de faire, nous allons prendre l'exemple d'un projet Ruby On Rails. Ce projet qui est encore aujourd'hui en développement intensif peut être visible ici

La préparation du projets

Dans un premier temps, il conviens de quitter pour un temps l'ordinateur. J'aime me poser avec un papier et un crayon et réfléchir calmement à mon projet. Pour qui, pourquoi, comment, l'idéal est de pouvoir résumer en une phrase ce que l'application, le script ou le site web serra en mesure de faire. Dans mon cas, il s'agit de créer des CV.

A ce moment, on peut commencer à rédiger un petit cahier des charges qui prend en compte les besoins techniques de l'application.

En ce qui me concerne, l'idée était de faire un CV en quelques minutes et de pouvoir l'imprimer directement. Pas besoin de s'occuper de la mise en page, des formulaires déjà prévus, une grande liberté d'action pour l'utilisateur.

En ce qui concerne la base de donnée, là aussi on peut commencer à dessiner le schéma qui sera utilisé, définir les clés étrangères et les relations entre les tables.

La bonne idée étant de penser "itération"

La pensée itérative

Ce que j'appelle la pensée itérative, c'est la capacité à ne voir le projet que petits bouts par petits bouts :
  1. je fait ça , ça marche
  2. je fait encore ça, ça marche ...
Pour ceux qui ont déjà programmés, ça ressemble fortement à :
  1. programmation
  2. tests
  3. production
Dans le cas qui nous occupe, c'est à dire le design d'une base de données, j'ai commencé par penser CV, un CV est constitué de sections, formations, expériences, etc.. Qui sont elles même constituées d'entrées.

Maintenant, j'ai trois éléments dont les relations tombent sous le sens :
  • le cv contient des sections
  • les sections contiennent des entrées
Premières lignes de codes

J'aurais put passer un temps fabuleux à tenter d'imbriquer mes tables, a penser à l'état civil, à la photo du CV, à l'utilisateur et à l'authentification mais je décide, de ne me pencher QUE sur la table entrée.

Je lance donc mon terminal préféré et je lance :

rails cv_en_ligne -d mysql
create
create app/controllers
create app/helpers
create app/models
create app/views/layouts
create config/environments
create config/initializers
...

J'ai lancé l'option -d mysql car rails 2.0 à eu la bonne idée de choisir sqlite comme base de donnée par défaut. Je ne commenterais pas ce choix mais je ne suis pas certain que ce soit une bonne chose. Passons !
A ce moment, il nous faudra éditer le fichier /config/database.yml pour indiquer à rails l'utilisateur et le mot de passe de la base de donnée. Nous pouvons laissez les autres champs à l'identique pour le moment.


Grâce à la méthode des échafaudages je vais pouvoir facilement créer mes entrées :
desktop:~/cd cv_en_ligne
desktop:~/cv_en_ligne$ script/generate scaffold entree
exists app/models/
exists app/controllers/
exists app/helpers/
create app/views/entrees
exists app/views/layouts/
exists test/functional/
exists test/unit/
create app/views/entrees/index.html.erb
create app/views/entrees/show.html.erb
create app/views/entrees/new.html.erb
create app/views/entrees/edit.html.erb
create app/views/layouts/entrees.html.erb
create public/stylesheets/scaffold.css

J'ai laissé volontairement une partie de ce que retourne la commande pour vous permettre de voir tous les fichiers que me génère la commande.

Pour le moment et pour la première itération nous ne nous intéressont pas à tous ces fichiers, nous allons simplement éditer le fichier /db/migrate/create_entrees


class CreateEntrees
pour le moment, cela suffira à nos besoins. En effet, en lançant la commande :
rake db:create:all
cette ligne de code crera les table :
  • cv_developpement
  • cv_test
  • cv_production
rake db:migrate
cette commande va créer la table entrees dans les trois tables.
rake db:test
cette commande va effectuer une serie de tests pour vérifier que tout c'est bien passé.
pour finir, vous pouvez bien sur lancer la commande

script/server
ce qui va lancer le serveur webrick sur le port 3000
http://localhost:3000
vous envera vers la page de garde de rails
http://localhost:3000/entrees
vous permettra de créer vos premières entrées (pour faire des petits test).

conclusion

Voila, cette première itération vous aura tout au plus pris une demi heure et vous avez quelquechose de fonctionnel. A partir de ce moment, nous allons pouvoir nous charger de mettre en place un environnement de develloppement qui vous permettra de vous sentir à l'aise.

la suite au prochain numéro !!

Aucun commentaire: