En reprenant le train un peu en route (j'espère ne pas être trop à côté) : En gros Zephyr ton problème c'est de trouver comment construire l'API Ajax serveur (ce que le serveur propose comme interface) sans que ce soit techniquement trop contraignant. Pour moi certains trucs à suivre seraient :
- De penser cette API (les "services") d'un point de vue plus modèle de données qu'interface graphique, puisque dans ton cas le couplage te pose problème. L'API ne correspond alors pas toujours exactement avec les évènements utilisateurs (clics et frappes), en fonction de l'UI et du modèle, il est possible de descendre un tas de données au cours d'un même appel mais les afficher bien plus tard.
- De regarder du côté des frameworks d'exposition de services PHP. Par exemple en Java,
DWR permet d'exposer directement des objets Java en tant qu'objets Javascript et de ne pas se préoccuper des problèmes techniques d'exposition.
- Concernant les moteurs de templates, je ne sais pas ce qui est prévu pour Smarty, mais ca revient au point 1) : puisque l'API serveur ne peut pas être trop couplée à l'UI, pour permettre le remplacement sans conséquences d'un template, il faut la penser modèle de données. Le Javascript peut être mutualisé entre les templates si il y a suffisamment d'invariants entre eux (structure, id des tags, types des tags, ...), sinon il n'y a pas de choix que d'associer une version du Javascript à chaque template puisqu'il est intimement lié à l'UI (plus ou moins gênant en fonction de ce qui a été déporté côté browser).
Si ce problème de couplage entre l'interface et les appels asynchrones persiste, on peut toujours pousser le curseur à l'extrême côté client, en utilisant des frameworks réellement RIA tel que
TIBCO General Interface (qui lui est du pur JavaScript), où là la création de l'HTML est entièrement réalisé côté browser (à partir d'un modèle de composant dans le cas de GI), et où les appels asynchrones sont de "vrais" web services n'ayant aucune connaissance de l'UI (éventuellement implémentés en SOAP, et contrairement à ce qu'on pourrait croire ça n'a pas l'air de ramer). L'effet de bord est que le développement (et surtout les tests) des règles métiers et de l'interface graphique sont entièrement séparés, ça rend les choses nettement plus simples et sûres.