PHP Java (à l'aide de PtoJ)
Je tiens à la transition de notre code mal écrit le code PHP à mal écrite en Java, car je crois que le code Java est plus facile de mettre de l'ordre. 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 la plupart de bienvenue; merci!
Honnêtement, une conversion d'un truand de la base de code est lié à la rendre plus laide, si Java est plus propre ou pas (qui, au passage, n'est pas 😉).
Vous avez raison, je suis juste en espérant que nous allons obtenir le code Java en meilleure forme que l'PHP idem est maintenant. Pensez-vous que c'est une cause perdue?
Ne devrait-ce pas être étiqueté: "Garbage In, Garbage Out"?
Ou peut-être "à l'Aide! J'ai besoin de transformer les déchets en... quelque chose d'autre"? Peut-être trop peu de magiciens sur ce forum.
Vous avez raison, je suis juste en espérant que nous allons obtenir le code Java en meilleure forme que l'PHP idem est maintenant. Pensez-vous que c'est une cause perdue?
Ne devrait-ce pas être étiqueté: "Garbage In, Garbage Out"?
Ou peut-être "à l'Aide! J'ai besoin de transformer les déchets en... quelque chose d'autre"? Peut-être trop peu de magiciens sur ce forum.
OriginalL'auteur Jonas Byström | 2011-05-23
Vous devez vous connecter pour publier un commentaire.
Mal écrite en PHP est susceptible d'être très difficile à convertir, car beaucoup de mauvaises choses dans le PHP n'existe pas en Java (le même est vrai vice versa si, afin de ne pas prendre cela comme de me dire que Java est mieux - je vais le garder bien à l'écart de la flamme-guerre).
Si vous parlez d'un héritage PHP app, son très probable que votre code contient beaucoup de code de procédure et de inline HTML, ce qui n'est pas en train de convertir bien à Java.
Si vous êtes vraiment malchanceux, vous aurez des choses comme
eval()
états, dynamique des noms de variables (à l'aide de$$
syntaxe), en boucleinclude()
états, le recours à la 'register_globals' drapeau, et pour le pire. Ce genre de trucs complètement déjouer toute tentative de conversion.Votre autre problème majeur est que le débogage le résultat après la conversion va être l'enfer, même si vous avez de belles code pour commencer. Si vous voulez éviter les régressions, vous devez aller à travers l'ensemble de la base de code sur les deux côtés avec un peigne fin.
Le seul moment où vous allez pour obtenir un résultat satisfaisant à partir d'une conversion automatique de ce type est si vous commencez avec un raisonnablement marée base de code, écrit au moins principalement dans la mise à jour de la programmation orientée objet code.
À mon avis, vous feriez mieux de faire le refacting exercer avant la conversion. Mais bien sûr, compte tenu de votre question, qui serait plutôt l'encontre de la point. Donc ma recommandation est de le coller dans PHP. Le code PHP peut être très bon, et même la mauvaise PHP peut être poli avec un peu de refactoring.
[MODIFIER]
En réponse à @Jonas est question dans les commentaires, quel est le meilleur moyen de refactoriser horrible code PHP?'
Cela dépend vraiment de la nature de la code. Un grand bloc monolithique de code (ce qui explique beaucoup de la mauvaise PHP que j'ai vu) peut être très difficile (sinon impossible) à implementunit tests pour. 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 Le 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 fiabilité des tests fonctionnels écrit, il est bon pour vous aider à rester confiants que vous n'êtes pas d'introduire des régressions.
La bonne nouvelle, c'est qu'il peut être très facile et satisfaisante à déchirer les mauvais code et de le reconstruire.
La manière dont j'ai abordé dans le passé est de prendre une approche en deux étapes.
Stade, on réécrit le code monolithique en qualité décente code de procédure. C'est relativement facile, et le nouveau code peut être chuté en place, comme vous allez. C'est là que le gros du travail se passe, mais vous avez toujours jusqu'à la fin avec le code de procédure. Un peu mieux le code de procédure.
Deuxième étape: une fois que vous avez une masse critique de qualité raisonnable code de procédure, vous pouvez alors refactoriser à nouveau dans un modèle de programmation orientée objet. Ce doit attendre jusqu'à ce que plus tard, car il est généralement assez difficile de convertir les anciens mauvaise qualité de PHP directement dans un ensemble d'objets. Il doit également être fait en assez gros morceaux, parce que vous serez le déplacement de grandes quantités de code dans des objets de tous à la fois. Mais si vous avez fait un bon travail dans la première étape, puis la deuxième étape devrait être assez simple.
Quand vous l'avez dans les objets, alors vous pouvez commencer à sérieusement penser à des tests unitaires.
ma réponse à votre commentaire est trop gros pour le mettre dans les commentaires ici, donc j'ai édité ma réponse; voir ci-dessus.
OriginalL'auteur Spudley
Je dirais que la conversion automatique à partir de PHP Java sont les suivantes:
pros:
contre:
laid code: je doute que la conversion automatique de laid PHP va générer quelque chose mais laide Java
code difficile à maintenir: le générer automatiquement du code est susceptible d'être désuète, ou, au 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 rare d'utiliser Java meilleures pratiques pour une application Web ou disponibles cadres
En résumé
Je voudrais éviter de traduction automatique à partir de PHP Java, et je woudl au moins tenir compte de la réécriture de l'application à partir du sol à l'aide de Java. Surtout si vous avez une application Web, choisir un bon framework Java pour les applications web, le faire d'une conception soignée et de poursuivre avec une mise en œuvre progressive (une caractéristique de l'original de votre PHP webapp à un moment). Avec cette approche, vous vous retrouverez avec un nettoyant le code plus facile à maintenir et à faire évoluer ... et vous pouvez constater que le temps n'est pas plus grand que ce que vous auriez besoin pour nettoyer/debug code automatiquement généré 🙂
OriginalL'auteur MarcoS
Contrairement à d'autres réponses ici, je suis d'accord avec votre stratégie de conversion "code PHP pour la mal écrite en Java, car je crois que le code Java est plus facile à ranger", mais vous devez vous assurer que l'outil que vous utilisez ne pas introduire plus de bugs que vous pouvez manipuler.
Une stratégie optimale serait:
1) Faire la conversion automatique
2) Obtenir un titre de MVP en cours d'exécution avec des tests de base
3) Démarrez à l'aide de l'incroyable Eclipse/IntelliJ refractoring outil pour rendre le code plus lisible.
Moderne Java IDE peut refactorisation de code avec zéro bugs quand c'est fait correctement. Il peut aussi vous dire quelles sont les fonctions qui ne sont jamais appelés et beaucoup d'autres inspections.
Je ne sais pas comment "PtoJ" a été, depuis leur site a disparu, mais idéalement, vous voulez quelque chose qui ne fait pas que traduire la syntaxe, mais de la logique. J'ai utilisé php2java.com récemment, et ça a très bien fonctionné. J'ai aussi utilisé divers "syntaxe" des convertisseurs (et pas seulement pour PHP, Java, mais aussi ObjC -> Swift, Java -> Swift), et même ils fonctionnent très bien si vous mettez du temps à faire fonctionner les choses après.
Aussi, trouvé cet intéressant billet de blog à propos de ce qu'il serait arrivé à numiton PtoJ (http://www.runtimeconverter.com/single-post/2017/11/14/What-happened-to-numition).
OriginalL'auteur Arthur Rodriquez
http://www.numiton.com/products/ntile-ptoj/translation-samples/web-and-db-access/mysql.html
Vous préférez ne pas utiliser Hibernate ?
OriginalL'auteur peufeu
P2J apparaît hors ligne maintenant, mais j'ai écrit une preuve de concept qui convertit un sous-ensemble de PHP, en Java. Il utilise le transpiler bibliothèque de SWI-Prolog:
C'est le programme de la sortie:
OriginalL'auteur Anderson Green