Bonjour à tous.


Je suis en pleine mise à jour d'une de mes app vers rails4. Je voulais 
profiter de cette mise à niveau pour séparer mon code en plusieurs engines. 
Je me suis dit que j'avais tout intérêt à poser mes questions avant plutôt 
que mes erreurs après. 

L'application de base est un outil de gestion des membres pour les 
organisations à but non lucratif. J'installe cette application dans les 
différentes structures et je modifie mon code pour l'adapter aux besoins 
des situations. Pour gagner du temps je pensais déplacer une partie des 
fonctionnalités dans des engines. L'objectif est d'avoir une application de 
départ épurée et où l'on puisse facilement ajouter des options. 

J'ai joué un peu avec des engines dans une application de test et j'ai pas 
mal épluché les docs et autres blog sur le sujet. Voici les questions que 
je me pose encore et que je voulais élucider avant de réécrire le code:

1 - Convention pour nommer les engines:

Au départ j'ai nommé l'engine par le nom de sa fonctionnalité. Par exemple 
si je voulais ajouter la gestion des activités pour les membres je nommais 
l'engine: Activity. Mais lorsqu'on veut générer un modèle du même nom on se 
rend compte que l'opération ne va pas être possible. 

Je pensais nommer de la façon suivante: 
applicationdebase_nomdelafonctionnnalité (ex: member_activity)

2 - full vs mountable

J'ai lu pas mal sur cette question. Beaucoup de personnes semblent utiliser 
et documentent le côté mountable ( les guides, le livre: rails recipes 
etc... ). J'ai essayé les deux options. Full permet vraiment une 
implantation simple et rapide de sa fonction ( pas de routage à ajouter, 
pas d'isolation de nom qu'il ne faut pas oublier etc). Mais je suis 
conscient des risques de collision avec les noms de mes classes/tables ... 
Ma question est: si je suis seul à mettre les mains dans le code est-ce 
malgré tout un risque ou un mauvaise habitude à ne pas prendre? Le code 
n'aura pas vocation à être utilisé ailleurs que dans cette application.

3 - "if engine exists?"

Dans l'application de base je pensais mettre tout le code dont les engines 
auront besoin. Par exemple dans la barre latérale je voudrai afficher les 
dernières activités mais seulement si l'engine est installé. Si l'engine 
est présent le code dans ma vue sera utilisé sinon non.

Pendant mes tests j'ai utilisé:

if defined? Activity
  @activities = Activity.allend

et dans mes vues:

<% if defined? Activity %>
 <h3><%= @activities.first.title %></h3><% end %>

Tout fonctionne mais est-ce une bonne pratique? A-t-on des alternatives? 
J'ai pensé à une zone d'option dans l'application où l'on pourrait 
"activer" l'engine une fois installée et remplacer le "defined?" par une 
vérification de la valeur de l'option.

Quels sont vos idées/usages/coutumes avec les engines. Quels sont vos 
conseils avant de se lancer dans le découpage de mon application?

Merci!

ps: j'ai posé cette question sur stackoverflow mais je souhaitais avoir le 
plus d'avis 
possible<http://stackoverflow.com/questions/20203392/rails-best-pratice-engines>
. 

-- 
-- 
Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de 
Google Groups.
Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse 
[email protected]
Pour résilier votre abonnement envoyez un e-mail à l'adresse 
[email protected]
--- 
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes 
Railsfrance.
Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, 
envoyez un e-mail à l'adresse [email protected].
Pour plus d'options, visitez le site https://groups.google.com/groups/opt_out .

Répondre à