J'ai une grande application web fonctionnant en Perl CGI. Ça marche bien, c'est bien écrit, mais comme c'était le cas dans le passé, tous les html sont codés en dur dans les appels CGI, comme vous pouvez l'imaginer, il est difficile de le maintenir, de l'améliorer et ainsi de suite. pour ajouter quelques modèles et intégrer avec un framework (catalyseur ou application CGI ::). Ma question est la suivante: Quelqu'un ici a une expérience comme celle-là? Il y a des choses pour lesquelles je dois faire attention? Je suis conscient qu'avec les deux frameworks je peux exécuter des scripts CGI natifs, donc c'est bien parce que je peux exécuter les deux (code natif CGI "frameworked") ensemble sans aucun traumatisme. Des conseils?Quelle est la meilleure approche pour migrer un CGI vers un Framework?
Répondre
Ensuite, quand vous changez des choses, vous savez toujours si quelque chose se brise, et ce qui casse.
Ensuite, extrayez le HTML dans des modèles et des sous-modules couramment utilisés dans les modules. Après c'est un morceau de gâteau pour passer à un cadre.
En général, allez pas à pas pour avoir toujours une application fonctionnelle.
Extrayez le code HTML de la logique de traitement dans le script CGI. Identifiez tout le code qui affecte la sortie HTML, car ceux-ci sont candidats pour devenir des variables de modèle. Séparez cela en un fichier HTML, avec les parties identifiées marquées par des variables de modèle. Finalement, vous serez en mesure de refactoriser la page de sorte que tout le traitement est fait au début du code et le modèle HTML vient d'être appelé à la fin de tout le traitement. Ecrivez les tests d'abord (par exemple avec Test::WWW::Mechanize
).
Dans ce genre de situation, à la base de la réécriture, l'ancien code est utile pour A) les tests et B) les détails de conception. Idéalement, vous feriez un ensemble de tests, pour toutes les fonctionnalités de base que vous souhaitez répliquer, ou au moins des tests qui analysent les pages de résultats finaux afin que vous puissiez voir que le nouveau code renvoie les mêmes informations pour les mêmes entrées.
Les détails de conception dans le code peuvent être inutiles, en fonction de combien le cadre gère automatiquement. Si vous avez un bon ensemble de tests et qu'une conversion simple fonctionne bien, vous avez terminé. Si le comportement du nouveau ne correspond pas à l'ancien, vous devez probablement creuser plus profondément dans le "pourquoi?" et ce sera probablement quelque chose d'étrange, ça n'a pas de sens à première vue. Une chose à ne pas oublier est de savoir si quelqu'un a fait quelque chose de similaire dans le framework que vous utilisez. Vous pourriez vous épargner BEAUCOUP de temps et d'argent.
Voici comment je l'ai fait en utilisant Python au lieu de Perl, mais cela ne devrait pas d'importance:
- séparés HTML et le code dans des fichiers distincts. J'ai utilisé un moteur de modèle pour cela.
- Création fonctions à partir du code qui a rendu un modèle avec un ensemble de paramètres.
- Organisé les fonctions (que j'ai appelé vues, inspiré par Django) d'une manière sensible. (Vues Admin, vues de l'utilisateur, etc.) Les vues tous suivent la même convention d'appel!
- refactorisé la base de données et demande des choses afin que les vues ne contiennent que vue code spécifique (lire: Manipulation GET, POST des demandes, etc., mais rien de bas niveau). S'appuyer fortement sur les bibliothèques existantes pour cela.
Je suis ici pour le moment. :-) La prochaine étape évidente est bien sûr:
- un répartiteur Ecrire qui mappe URL à vos vues. Cela conduira également à des URL plus belles et à une meilleure gestion des erreurs et des erreurs.
L'une des hypothèses que les frameworks font est que les urls correspondent au code. Par exemple, dans un cadre, vous verrez souvent les éléments suivants:
http://app.com/docs/list
http://app.com/docs/view/123
Habituellement, si les anciens scripts CGI ne fonctionnent pas comme ça, vous êtes plus susceptibles d'avoir quelque chose comme:
http://app.com/docs.cgi?action=view&id=123
Pour profiter du framework, vous devrez peut-être changer toutes les URL. Que vous puissiez le faire et que vous conserviez le bon fonctionnement des anciens liens, cela peut constituer une grande partie de votre décision.
De même, les frameworks prennent en charge une sorte de ORM (Object Relational Mapper) qui permet d'abstraire les appels de la base de données et de gérer uniquement les objets. Pour Catalyst
, il s'agit généralement de DBIx::Class
. Vous devriez évaluer ce que le coût de passer à ce sera.
Vous trouverez probablement que vous voulez effectuer une réécriture complète, avec l'ancien code comme une plate-forme de référence. Cela peut être beaucoup moins de travail que prévu. Cependant, commencez par quelques sites de jouets pour vous faire une idée du cadre/modèle/modèle avec lequel vous décidez d'aller.
- 1. Quelle est la meilleure approche de recherche?
- 2. Quelle est la meilleure approche d'automatisation des tests pour WatiN
- 3. Quelle est la meilleure approche pour sérialiser BigDecimal/BigInteger en ProtocolBuffers
- 4. Quelle est la meilleure approche pour gérer les exceptions lancées dans un thread séparé?
- 5. Quelle serait la meilleure approche pour concevoir un ensemble de services Web hautement disponibles?
- 6. Meilleure approche pour la réindexation
- 7. Quelle est la meilleure façon de dire à un framework quelle base de données utiliser?
- 8. migrer un site web vers WIKI
- 9. Meilleure approche pour rediriger un grand nombre d'anciennes URL vers de nouvelles URL?
- 10. Quelle est la meilleure solution pour migrer des tables Linq DBML?
- 11. Quelle est la meilleure approche pour remplir un contrôle de page maître qui dépend de la page de contenu?
- 12. Quelle est la meilleure approche pour manipuler les actifs dans Drupal à partir de l'application .Net?
- 13. Quelle est la meilleure approche pour utiliser OpenGL sur le Web?
- 14. Quelle est la meilleure approche pour appliquer des styles à des quantités massives d'objets?
- 15. Quelle est la meilleure approche pour calculer une formule qui change de valeur chaque jour?
- 16. Comment migrer un ancien projet vers Zend Tool?
- 17. Quelle est la meilleure approche pour interpréter une entrée de texte à des fins de géocodage?
- 18. Meilleure façon de déboguer un CGI Windows
- 19. Quelle est la meilleure approche pour auditer une grande application web java/j2ee?
- 20. Quelle est la meilleure approche lors de la migration de projets hérités à travers les versions de Visual Studio?
- 21. Quelle est la meilleure façon de déboguer un écrasement explorer.exe?
- 22. Quelle est la meilleure approche de déploiement pour les applications WPF avec base de données locale?
- 23. Quelle est la meilleure approche pour déployer une application Web ASP.NET sur plusieurs serveurs dans un environnement en cluster?
- 24. Quelle est la bonne approche pour synchroniser les animations JQuery?
- 25. Quelle est la meilleure approche pour les services Web - contrat d'abord ou contrat en dernier?
- 26. Quelle est la meilleure approche pour attendre des éléments sur une page Waitforcomplete() ou system.threading.thread.sleep()
- 27. Meilleure façon de migrer le contenu d'un site vers un nouveau site SharePoint
- 28. Quelle est la meilleure façon de chiffrer un clob?
- 29. Quelle est la meilleure méthode pour transférer un fichier http du client vers un serveur, dans Java 1.5?
- 30. quelle est la meilleure façon de marquer un texte?
La réécriture depuis le zéro n'est pas une option pour un système de plus de 5k lignes. Mais de toute façon, merci pour vos contributions! –