08-02-2014, 11:33 AM
(Modification du message : 08-02-2014, 11:34 AM par Sephi-Chan.)
J'ai eu une fois affaire à ce genre de problématique où j'avais vraiment 2 variantes d'interface à rendre selon des conditions diverses (essentiellement basée sur la requête elle-même : paramètre d'URL, Cookies, Header, User Agent, etc.). Dans ton cas, ces conditions sont :
L'idée, c'est que quand une requête arrive, ton contrôleur détermine quel template rendre selon la variante de l'application demandée. Il peut également faire des traitements spécifiques pour une variante ou une autre.
Du coup c'est plutôt simple et tu restes DRY : tu utilises le tronc commun de code que tu désires pour chaque action, et tu as des templates différents pour les différentes vues, ce qui t'épargne de la logique conditionnelle (= complexité) dans celles-ci.
Ça vaut ce que ça vaut, mais la récente release de Rails 4.1 intègre un mécanisme de variant de ce style (honnêtement, c'est juste une façon d'intégrer le pattern que j'ai énoncé au framework, donc c'est vraiment pas spécifique à Ruby). Ça peux t'inspirer : Ruby on Rails 4.1 - Action Pack Variants.
- Une machine peu performante. On peut supposer que tu stockes ça dans un cookie, pour que ça reste propre à la machine en cours) ou dans les préférences de ton utilisateur courant (s'il fait ce choix de manière globale) ;
- Les tablettes et smartphones. Tu peux utiliser le user agent pour identifier ces machines ;
- L'utilisation du site via l'application Android, là je suppose que l'application peut définir un cookie, utiliser un user agent particulier, transmettre un header ou une variable dans l'URL. : quoi qu'il en soit le choix est facile pour chaque requête.
L'idée, c'est que quand une requête arrive, ton contrôleur détermine quel template rendre selon la variante de l'application demandée. Il peut également faire des traitements spécifiques pour une variante ou une autre.
Du coup c'est plutôt simple et tu restes DRY : tu utilises le tronc commun de code que tu désires pour chaque action, et tu as des templates différents pour les différentes vues, ce qui t'épargne de la logique conditionnelle (= complexité) dans celles-ci.
Ça vaut ce que ça vaut, mais la récente release de Rails 4.1 intègre un mécanisme de variant de ce style (honnêtement, c'est juste une façon d'intégrer le pattern que j'ai énoncé au framework, donc c'est vraiment pas spécifique à Ruby). Ça peux t'inspirer : Ruby on Rails 4.1 - Action Pack Variants.