2010-04-15 2 views
2

Je voudrais développer un certain nombre d'applications Rails non-triviales qui implémentent toutes un ensemble de fonctionnalités de base, mais qui ont chacune des personnalisations, des extensions et des différences esthétiques particulières. Comment puis-je tirer les principales fonctionnalités (modèles, contrôleurs, assistants, classes de support, tests) communes à tous ces systèmes de telle sorte que la mise à jour du noyau bénéficiera à toutes les applications qui en dépendent?Comment puis-je extraire les fonctionnalités de base de plusieurs applications Rails?

J'ai vu Rails Engines mais ils semblent trop détachés, presque trop abstraits pour être construits. Je peux les trouver utiles pour ajouter un composant à une application existante, par exemple en ajoutant un moteur de blog à votre site de commerce électronique existant. Puisque les moteurs semblent être pour la plupart autonomes, il semble difficile et peu commode d'outrepasser leurs fonctionnalités et leurs vues tout en les gardant SEC.

J'ai également considéré l'abstraction du code dans une gemme, mais cela semble un peu étrange. Est-ce que je fais dépendre la gemme des gemmes de Rails, et les contrôleurs des modèles & de modèle dedans, et puis les sous-classe dans mes diverses applications? Ou est-ce que je définis beaucoup de modules à l'intérieur de la gemme que j'inclus dans les différents endroits de mes différentes applications? Comment puis-je tester la gemme, puis tester l'ensemble des personnalisations et des fonctionnalités surchargées? Je suis également préoccupé par la façon dont je développerai les applications Gems et Rails en tandem, puis-je vendre un dépôt git de la gemme dans l'application et pousser à partir de là pour ne pas avoir à construire une nouvelle gemme à chaque itération? Aussi, y a-t-il des hôtes gem privés/puis-je configurer ma propre source de gemme?

En outre, des suggestions générales pour ce genre d'entreprise? Paradigmes d'abstraction à respecter? Lecture obligatoire? Commentaires des sages qui ont déjà fait cela? Merci!

Répondre

1

n'a jamais fait une telle chose, mais je suppose qu'un plug-in Rails serait le bon endroit pour elle:

http://guides.rubyonrails.org/plugins.html#models

http://guides.rubyonrails.org/plugins.html#controllers

http://guides.rubyonrails.org/plugins.html#helpers

Et vous pouvez créer un bijou à partir de là après:

http://guides.rubyonrails.org/plugins.html#plugingems

+0

Un plugin serait en effet le plus simple ... – severin

+0

Pouvez-vous essayer d'expliquer comment je voudrais rouvrir (ou sous-classer si la réouverture n'est pas possible) les classes définies dans mon plugin dans l'application? Mon problème principal est le partage de code entre le plugin et l'application, où le comportement normal d'un modèle est défini dans le plugin mais l'application ne surcharge que quelques méthodes. Si je définis le modèle dans l'application, Rails y recherche d'abord la classe recherchée et la constante manquante devient définie. Rails ne regarde jamais dans le plugin, ce qui signifie qu'aucune de mes fonctionnalités de base ne passe. – hornairs

Questions connexes