3 votes

comment organiser le code pour les différentes "interfaces de dispositifs mobiles" et "interfaces de bureau" ?

J'envisage de créer une application web. J'utilise le framework PHP Kohana avec Smarty. Mon application web aura également une interface pour les appareils mobiles. Maintenant, il y aura beaucoup de code commun et beaucoup de code séparé pour les deux interfaces.

Comment dois-je organiser le code de sorte que :

  1. Il n'y a pas de duplication du code.
  2. Le code inutile n'est pas chargé dans le système. Par exemple, le code spécifique à l'interface utilisateur de l'ordinateur ne doit pas être chargé dans l'interface de l'iPhone ou vice versa.

4voto

Kiall Points 131

Vous avez vraiment plusieurs choix !

Vous pouvez choisir de suivre la voie des "2 projets" en utilisant des modules Kohana partagés - mais personnellement, je n'aime pas cette approche.

J'utiliserais personnellement une approche similaire pour un site multilingue - Ainsi ... apache (ou autre) réécrirait m.example.tld/my/page -> www.example.tld/mobile/my/page.

En supposant que vous utilisez Kohana3 - L'itinéraire standard pourrait être modifié comme suit :

Route::set('messages', '<format>/(<controller>(/<action>(/<id>)', array('format' => '(mobile|desktop))
->defaults(array(
 'format'     => 'desktop',
 'controller' => 'welcome',
 'action'     => 'index',
));

Ainsi, les utilisateurs ne verront jamais les URL /mobile/, mais vous pouvez maintenant choisir le modèle smarty en fonction de Request::instance()->param('format') ;

Probablement - Vous n'aurez qu'à dupliquer les fichiers de vue/les modèles smarty pour chaque plateforme.

J'utilise un modèle similaire pour les formats de sortie ... XML, JSON, XHTML, RSS ...

J'espère que cela vous aidera ;)

1voto

Sabya Points 2935

Finalement, j'ai suivi l'approche de la route des 2 projets différents. Parce que cela donne beaucoup de flexibilité. Si je veux partager certains modèles, vues, contrôleurs, je les mets dans des "modules". Sinon, si je veux avoir quelque chose de séparé pour deux interfaces, je les mets dans le projet correspondant.

Donc : ma source ressemble à :

</>
  proj_desktop/
    htdocs/
    application/
      models/
      views/
      controllers/
  proj_iphone/
    htdocs/
    application/
      models/
      views/
      controllers/
  proj_mobile/
    htdocs/
    application/
      models/
      views/
      controllers/
  modules/
    myApp/
      models/
      views/
      controllers/
  system/
    models/
    views/
    controllers/

1voto

jackbot Points 1083

Une solution consisterait à utiliser des vues distinctes pour les navigateurs de bureau et les navigateurs mobiles. Toute votre logique se trouvera dans votre contrôleur et vous n'aurez donc pas à dupliquer le code, vous appellerez simplement la vue appropriée en fonction de la chaîne user-agent du navigateur.

0voto

Coderer Points 5099

Je recommande vivement d'avoir des vues séparées pour les écrans mobiles et de bureau. Dans la mesure du possible, ne liez pas directement l'affichage à la chaîne de caractères de l'agent utilisateur. Utilisez cette dernière pour diriger les appareils mobiles vers une URL distincte (comme m.whatever.com/page, ou www.whatever.com/m/page) dont le rendu est séparé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X