Réusinage de code legacy en C# : Guide pratique pour le développeur .NET

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Réfactorisation du code legacy en C# : Comment transformer un projet obsolète en un produit .NET moderne



Chaque développeur .NET est tôt ou tard confronté à du code legacy — des classes monolithiques de 3000 lignes, une logique spaghetti dans des fichiers .aspx.cs et des chaînes magiques dispersées dans tout le projet. La réfactorisation de ce code n'est pas simplement un "nettoyage" syntaxique, mais une tâche stratégique : améliorer l'architecture sans casser la logique métier. Dans cet article, nous allons analyser les approches pratiques de la réfactorisation du code C# qui vous aideront à moderniser en toute sécurité et efficacement les projets hérités.



1. Préparation : Pourquoi la réfactorisation du code legacy nécessite une approche particulière



La principale erreur des débutants est de se précipiter pour réécrire le code. Dans les projets legacy C# .NET, il y a souvent des dépendances cachées : classes statiques, états globaux, liaisons rigides avec la base de données via ADO.NET. Toute modification peut provoquer une cascade d'erreurs.



Principaux signes de code legacy en C# :

  • Absence de tests unitaires — le code n'est pas couvert par des tests unitaires, ce qui rend la réfactorisation risquée.
  • Objets Dieu (God Objects) — des classes qui font tout : du travail avec la base de données au rendu de l'interface utilisateur.
  • Dépendances rigides — création directe d'instances via new SqlConnection() à l'intérieur des méthodes.
  • Chaînes et nombres magiques — des configurations intégrées dans le code, et non dans app.config ou appsettings.json.
  • Utilisation d'API obsolètes — par exemple, WebClient au lieu de HttpClient ou ArrayList au lieu de List<T>.


Avant de commencer la réfactorisation, assurez-vous de : geler les exigences du client, configurer un système de contrôle de version (Git) et créer un "filet de sécurité" sous forme de tests d'intégration.



2. Réfactorisation sécurisée : La stratégie du "Déplacement du mur"



La technique classique pour C# est le Strangler Fig Pattern (Patron du Figuier Étrangleur). Au lieu de tout réécrire d'un coup, vous remplacez progressivement les anciens composants par de nouveaux, jusqu'à ce que l'ancien code cesse d'être utilisé.



2.1. Extraction d'interfaces et injection de dépendances



L'anti-patron le plus fréquent dans le C# legacy est celui des méthodes statiques d'aide. Prenons un exemple :



// Code obsolètepublic class OrderService{    public void ProcessOrder(int orderId)    {        var conn = new SqlConnection("Server=myServer;Database=myDB;...");        var cmd = new SqlCommand("SELECT * FROM Orders WHERE Id = " + orderId, conn);        // ... des tonnes de logique    }}


Étape 1 : Nous extrayons une interface pour l'accès aux données.



public interface IOrderRepository{    Order GetById(int orderId);}

public class OrderRepository : IOrderRepository{ private readonly string _connectionString;

public OrderRepository(string connectionString) { _connectionString = connectionString; }

public Order GetById(int orderId) { using var conn = new SqlConnection(_connectionString); // ... requête sécurisée }}


Étape 2 : Nous injectons la dépendance via le constructeur. Vous pouvez maintenant substituer le repository dans les tests, et le OrderService lui-même a cessé de dépendre d'une implémentation spécifique de la base de données.



public class OrderService{    private readonly IOrderRepository _orderRepository;

public OrderService(IOrderRepository orderRepository) { _orderRepository = orderRepository; }

public void ProcessOrder(int orderId) { var order = _orderRepository.GetById(orderId); // ... logique métier }}


2.2. Remplacement des types obsolètes par des types modernes



Dans .NET Framework, on utilisait souvent ArrayList, Hashtable et

Blogs

Book Recommendations