PHP à Java (en utilisant PtoJ)


Je voudrais faire la transition de notre base de code du code PHP mal écrit vers Java mal écrit, car je crois que le code Java est plus facile à ranger. Quels sont les avantages et les inconvénients, et pour ceux qui l'ont fait vous-mêmes, recommanderiez-vous PtoJ pour un projet d'environ 300k laid lignes de code? Trucs et astuces sont les bienvenus; merci!

Author: Jonas Byström, 0000-00-00

3 answers

PHP mal écrit est susceptible d'être très difficile à convertir car beaucoup de mauvaises choses en PHP n'existent tout simplement pas en Java (la même chose est vraie vice versa, alors ne prenez pas cela comme moi en disant que Java est meilleur - Je vais rester bien à l'écart de cette guerre de flamme).

Si vous parlez d'une application PHP héritée, il est fort probable que votre code contienne beaucoup de code procédural et de HTML en ligne, dont aucun ne va bien se convertir en Java.

Si vous êtes vraiment malchanceux, vous aurez des choses comme les instructions eval(), les noms de variables dynamiques (en utilisant la syntaxe $$), les instructions include() en boucle, la dépendance à l'indicateur 'register_globals', et pire encore. Ce genre de choses va complètement contrecarrer toute tentative de conversion.

Votre autre problème majeur est que le débogage du résultat après la conversion va être l'enfer, même si vous avez un beau code pour commencer. Si vous voulez éviter les régressions, vous devrez essentiellement parcourir toute la base de code des deux côtés avec un peigne fin.

La seule fois où vous obtiendrez un résultat satisfaisant d'une conversion automatisée de ce type est si vous commencez avec une base de code de marée raisonnable, écrite au moins principalement en code de POO à jour.

À mon avis, vous feriez mieux de faire l'exercice de refacturation avant la conversion. Mais bien sûr, compte tenu de votre question, cela préférerait vaincre le point. Par conséquent, ma recommandation est de le coller en PHP. Le code PHP peut être très bon, et même mauvais PHP peut être poli avec un peu de refactoring.

[MODIFIER]

En réponse à la question de @Jonas dans les commentaires, " quelle est la meilleure façon de refactoriser un code PHP horrible?'

Cela dépend vraiment de la nature du code. Un grand bloc monolithique de code (qui décrit beaucoup du mauvais PHP que j'ai vu) peut être très difficile (sinon impossible) pour implémenter les tests d'unité. Vous pouvez trouver que les tests fonctionnels sont le seul type de tests que vous pouvez écrire sur l'ancienne base de code. Ces utiliserait Sélénium, ou des outils similaires pour exécuter le code par le navigateur comme s'il s'agissait d'un utilisateur. Si vous pouvez obtenir un ensemble de tests fonctionnels fiables écrits, il est bon pour vous aider à rester confiant que vous n'introduisez pas de régressions.

, La bonne nouvelle est qu'il peut être très facile et satisfaisante à déchirer les mauvais code et de le reconstruire.

La façon dont je l'ai abordée dans le passé est d'adopter une approche en deux étapes.

La première étape réécrit le code monolithique en code décent code de procédure qualité. C'est relativement facile et le nouveau code peut être mis en place au fur et à mesure. C'est là que se passe la majeure partie du travail, mais vous vous retrouverez toujours avec du code de procédure. Juste un meilleur code de procédure.

Deuxième étape: une fois que vous avez une masse critique de code procédural de qualité raisonnable, vous pouvez le refactoriser à nouveau dans un modèle de POO. Cela doit attendre plus tard, car il est généralement assez difficile de convertir un vieux PHP de mauvaise qualité directement en un ensemble d'objets. Il doit également être fait en morceaux assez gros car vous déplacerez de grandes quantités de code dans des objets en même temps. Mais si vous avez fait du bon travail dans la première étape, la deuxième étape devrait être assez simple.

Lorsque vous l'avez dans des objets, vous pouvez commencer à penser sérieusement aux tests unitaires.

 8
Author: Spudley, 2011-05-23 10:12:47

Je dirais que la conversion automatique de PHP en Java a les éléments suivants:

Avantages :

  • rapide et sale, rendant peut-être heureux un chef de projet concerné par la livraison à court terme (en supposant que vous avez de la chance et que le code généré automatiquement fonctionne sans trop de débogage, ce dont je doute)

Inconvénients :

  • Code laid: Je doute que la conversion automatique à partir de PHP LAID générera autre chose que laid Java

  • Code non maintenable: le code généré automatiquement est susceptible d'être non maintenable, ou, du moins, très difficile à maintenir

  • Mauvaise approche: Je suppose que vous avez une application Web PHP; dans ce cas, je pense que la traduction automatique est peu susceptible d'utiliser les meilleures pratiques Java pour les applications Web, ou les frameworks disponibles

En résumé

J'éviterais la traduction automatique de PHP en Java, et je woudl au moins envisagez de réécrire l'application à partir de zéro en utilisant Java. Surtout si vous avez une application Web, choisissez un bon framework Java pour les webapps, faites une conception soignée et procédez à une implémentation incrémentielle (une fonctionnalité de votre webapp PHP d'origine à la fois). Avec cette approche, vous vous retrouverez avec un code plus propre qui est plus facile à maintenir et à évoluer ... et vous pouvez découvrir que le temps requis n'est pas plus grand que ce dont vous auriez besoin pour nettoyer / déboguer le code généré automatiquement :)

 3
Author: MarcoS, 2011-05-23 09:22:20

Contrairement aux autres réponses ici, je serais d'accord avec votre stratégie de convertir "du code PHP en Java mal écrit, car je crois que le code Java est plus facile à ranger", mais vous devez vous assurer que l'outil que vous utilisez n'introduit pas plus de bugs que vous ne pouvez gérer.

Un état optimal serait: 1) Faire la conversion automatisée 2) Obtenez un MVP en cours d'exécution avec quelques tests de base 3) Commencez à utiliser l'incroyable outil de réfractorisation Eclipse/IntelliJ pour rendre le code plus lisible.

Un moderne Java ID peut refactoriser le code avec z

 2
Author: ,