refactorisation

Please use this forum for open discussions about Bouml.
Merci d'utiliser ce forum pour des discussions ouvertes à propos de Bouml.

refactorisation

Postby Teaniel » Thu 19 Jun 2014 17:07

Bonjour,

J'ai une question à vous soumettre :
Depuis un certain temps déjà, je travaille sur un projet assez conséquent (environ 400 classes actuellement).
Or il est apparu qu'un certain nombre de classes 'utilitaires' et utilisées partout de fait (genre types de données) étaient mal foutues. Je les ai donc refaites, mais dans le cadre d'un autre projet dans lequel je les utilisais aussi.
Cependant elles avaient été importées dans ce dernier projet en mode simple (pas librairie). En conséquence de quoi les classes modifiées ne sont pas utilisées dans mon gros projet...

La question est donc de savoir comment je peux faire pour remplacer l'ensemble de mes classes mal foutues par les nouvelles.
En fait j'ai commencé par importer un projet dans lequel je les avais copiées. Ensuite j'ai pris la première à retirer, ai calculé ses références, puis ai remplacé partout la référence à l'ancienne par la nouvelle. Une fois que l'ancienne n'avait plus de référence utile, je l'ai supprimée. Deux heures pour une seule classe. J'en ai une vingtaine à remplacer de cette manière.

Y aurait-il une meilleure solution pour faire cette refactorisation?

Cordialement
Marc
Teaniel
 
Posts: 75
Joined: Sun 28 Oct 2012 18:57

Re: refactorisation

Postby Bruno Pagès » Fri 20 Jun 2014 07:02

Bonjour,

La première idée qui me viens à l'esprit est d'utiliser le roundtrip sur les parties modifiées (à priori sous un/des package(s) spécifiques). Si les deux projets ne génèrent pas leur code au même endroit il suffit de remplacer les sources de ce qui est encore l'ancienne version par la nouvelle version puis de faire le roundtrip.
S'il n'y a jamais eu de génération de code vous pouvez faire une telle génération sur le projet non à jour au niveau des classes non à jour (à priori sous un/des package(s) spécifiques) dans un répertoire de travail, puis vous remplacez les sources générés par la nouvelle version de ceux-ci, puis vous faite le roundtrip du/des package(s) correspondants.
Le roundtrip modifie les classes, les références à partir des classes se trouvant dans les parties non soumises au roundtrip perdurent donc. Par contre le renommage d'une classes détruira celle sous l'ancien nom et en créera une nouvelle.
Bien-sûr cela n'est possible que si le langage à un roundtrip, et s'il n'y a rien qui le perturbe.

L'autre solution est de faire automatiquement ce que vous avez fait à la main, via un plug-out ad-hoc. Vous importez (comme une librairie tant qu'à faire) la nouvelle version des classes modifiées de façon à avoir simultanément l'ancienne et la nouvelle version de ces classes, et votre plug-out modifie le modèle pour remplacer toute référence aux anciennes classes pas les nouvelles hormis bien-sur sous les packages regroupant les anciennes et nouvelles versions de classes

Bien évidemment je ne saurais que trop conseiller de sauvegarder les projets avant de se livrer à ce genre de manipulation.
ImageAuthor of Bouml
Bruno Pagès
 
Posts: 470
Joined: Mon 20 Feb 2012 08:23
Location: France

Re: refactorisation

Postby Teaniel » Fri 20 Jun 2014 11:56

Bonjour,

Je vous remercie pour ces réponses.
Je pense que je vais tenter de m'attaquer à la création du plug-out. Si c'est sans doute plus long, cela me semble moins aléatoire (génération/roundtrip ne sont en effet pas toujours symétriques). Et surtout, si bien écrit, cela sera réutilisable.

Cordialement,
Marc
Teaniel
 
Posts: 75
Joined: Sun 28 Oct 2012 18:57

Re: refactorisation

Postby Bruno Pagès » Thu 3 Jul 2014 19:05

Bonsoir,

Avez vous réalisé votre "plug-out" ?
ImageAuthor of Bouml
Bruno Pagès
 
Posts: 470
Joined: Mon 20 Feb 2012 08:23
Location: France

Re: refactorisation

Postby Teaniel » Thu 17 Jul 2014 17:25

Bonjour,

Désolé je suis un peu distrait ces temps-ci...
Non, je ne m'y suis pas encore attaqué.

Je vous tiendrai de toutes façons au courant :)

A bientôt
Marc
Teaniel
 
Posts: 75
Joined: Sun 28 Oct 2012 18:57


Return to Open discussions / Discussions ouvertes

Who is online

Users browsing this forum: No registered users and 0 guests

cron