Blog Arolla

[NCrafts.io] Refactor your architecture

NCrafts est une conférence (pas que) .NET indépendante et très sympathique qui a eu lieu le 16 mai dernier. L'ensemble des sessions était de qualité, et j'ai particulièrement apprécié celle de Julien Lavigne du Cadet, "Refactor your achitecture". Cette présentation était complémentaire à celle que j'ai animé au BreizhCamp une semaine plus tard "Faire la conception en équipe sans architecte, non mais allô quoi ?"

One size doesn't fit all
Les entreprises adoptent généralement une architecture 3 tiers : une couche pour la base de données, une autre pour le métier et la dernière pour la GUI. Julien qualifie ce type d'architecture de monolithique : soit tout le système est livré pour chaque changement, même infime, soit rien du tout. Ce qui peut poser problème pour les entreprises qui ont besoin de mettre en production souvent (c'est-à-dire quasiment toutes).

Le coût d'un changement de framework est également élevé dans ce type d'architecture puisque cela nécessite "juste" de réécrire une couche toute entière.

Ce choix d'architecture résulte la plupart du temps d'un vœu pieux de créer une solution unique/générique pour tous nos problèmes. C'est ainsi que l'on se retrouve par exemple avec un modèle de données commun à tous mais qui ne convient à personne.

Pour permettre des livraisons fréquentes, délaissons-nous de ce découpage horizontal (technique) de l'architecture pour privilégier un découpage vertical (métier). Le système est alors décomposé en petits composants indépendants : chacun d'entre eux pourra être livré sans impacter tout le reste du système.

Comment faire ?

Le changement d'architecture ne peut évidemment pas se faire instantanément. Pour l'amorcer, il faut commencer par des fonctionnalités qui ont peu de dépendances, par exemple : l'envoi de mails.

Lors du développement de ces fonctionnalités revisitées, une attention particulière doit être portée sur les interfaces et les façons de communiquer entre composants, puisque nous nous inscrivons dans une architecture verticale ! Ces composants doivent aussi communiquer de manière fonctionnelle, en privilégiant les champs métier par rapport aux structures purement techniques, tels que les viewbags.

Le choix du framework n'a pas à être déterminé dès le début du projet. Le plus important est de découper fonctionnellement et non la technologie à utiliser. Il est donc conseillé de partir intuitivement, puis d'effectuer les changements de manière itérative. Dans l'exemple d'envoi des mails, les problèmes de performances et de disponibilité ne sont traités qu'au moment où ils arrivent, mais pas avant.

Quand votre fonctionnalité est prête, n'oubliez pas de repasser sur l'ensemble du code legacy pour remplacer l'ancienne fonctionnalité par un appel au nouveau composant.

Et voilà, il ne reste plus qu'à s'attaquer à la prochaine fonctionnalité !

Quelques autres conseils pour la route

  • Écrire tout nouveau code dans un composant et non dans le plat de spaghettis existant.
  • Le code legacy est également réputé pour se dissimuler dans des procédures stockées. Pas de panique, si vous avez de la chance, la procédure n'est pas trop énorme, alors réécrivez-le dans un composant "métier". Sinon, encapsulez-le dans un module pour définir des frontières claires et ainsi éviter d'alimenter encore plus ledit plat de spaghettis.
  • Pour chacun des composants indépendants de votre système, évitez de reproduire des usines à gaz (sinon nous perdons l'intérêt de cet exercice). Le design doit rester simple et pour chaque composant.
  • Une architecture verticale permet de faire des expérimentations, puisque les composants sont indépendants, profitez-en !

Avec cette recette, les changements au sein du système sont maîtrisés et les tests sont facilités. Ainsi, les délais de livraison peuvent être réduits et le système reste maintenable. Que demander de plus ?

Pour les sceptiques, Julien nous a expliqué que son équipe a réussi à refactorer l'architecture d'un système d'une banque en 5 ans. La refactorisation d'une architecture est faisable, même si elle prend du temps (comme toute refactorisation de code legacy en fait). À quand votre tour ?

Plus de publications

1 comment for “[NCrafts.io] Refactor your architecture