Table des matières
2. Principe ouvert / fermé (OCP)
3. Principe de substitution de Liskov (LSP)
4. Principe de ségrégation de l'interface (ISP)
5. Principe d'inversion de dépendance (DIP)
Étapes pratiques pour refactoriser le code hérité
Maison développement back-end tutoriel php Refactoriser l'héritage PHP pour adhérer à des principes solides

Refactoriser l'héritage PHP pour adhérer à des principes solides

Jul 25, 2025 am 11:07 AM

Pour refactoriser le code PHP hérité, la réponse est d'améliorer la maintenabilité, la testabilité et la flexibilité du code grâce à une amélioration progressive plutôt qu'à une réécriture unique; Les pratiques spécifiques comprennent: 1. Suivez le principe de la responsabilité unique et divisez les classes qui assument trop de responsabilités en petites classes qui ne sont responsables que de fonctions spécifiques; 2. Suivez le principe de l'ouverture et de la fermeture, développez les fonctions à travers les interfaces et les mécanismes polymorphes plutôt que de modifier le code d'origine; 3. Suivez le principe du remplacement de Richter pour vous assurer que les sous-classes peuvent remplacer de manière transparente les classes des parents sans modifier l'exactitude du programme; 4. Suivez le principe de l'isolement de l'interface et divisez l'interface gonflée en interfaces dédiées plus petites; 5. Suivez le principe de l'inversion de la dépendance et faites en sorte que les modules de haut niveau dépendent de l'abstraction plutôt que de la mise en œuvre concrète par injection de dépendance; En fonctionnement réel, les tests doivent être rédigés en premier, les codes de problème doivent être identifiés et refactorisés par petites étapes, et avec l'aide de l'outil, améliorent progressivement la qualité du code plutôt que de poursuivre une perfection unique, et finalement rendre le code plus facile à comprendre et à développer.

Refactoriser l'héritage PHP pour adhérer à des principes solides

Refactoriser le code PHP hérité pour suivre les principes solides ne consiste pas à réécrire tout du jour au lendemain - il s'agit d'apporter des améliorations incrémentielles et réfléchies qui augmentent la maintenabilité, la testabilité et la flexibilité. Les systèmes hérités souffrent souvent d'un couplage serré, d'une mauvaise séparation des préoccupations et de classes gonflées. L'application de principes solides aide à résoudre ces problèmes systématiquement.

Refactoriser l'héritage PHP pour adhérer à des principes solides

Voici comment aborder le code PHP hérité de refactorisation avec chaque principe solide à l'esprit:


1. Principe de responsabilité unique (SRP)

Une classe ne devrait avoir qu'une seule raison de changer.

Refactoriser l'héritage PHP pour adhérer à des principes solides

Dans Legacy PHP, vous trouverez souvent des classes qui font trop - de la maintien des requêtes de base de données, de la mise en forme de sortie, de la validation des entrées et de la gestion de la logique métier dans un seul fichier.

Que rechercher:

Refactoriser l'héritage PHP pour adhérer à des principes solides
  • Classes avec plusieurs méthodes publiques faisant des choses sans rapport
  • De longues méthodes qui mélangent l'accès aux données, la logique et la sortie
  • Contrôleurs qui gèrent également la validation ou la persistance

Comment le réflecteur:

  • Briser les grandes classes en plus petites et concentrées
  • Extraire la validation, le formatage ou l'accès aux données dans des classes dédiées
  • Utilisez des cours de service pour encapsuler la logique commerciale

Exemple:

 // avant: classe d'utilisateurs en faisant trop
classe utilisateur {
    Fonction publique Save () {/ * enregistre sur db * /}
    Fonction publique SendWelcomeMail () {/ * Envoie un e-mail * /}
    Fonction publique Valider () {/ * Validation Logic * /}
}

// après: responsabilité séparée
class userservice {
    Registre des fonctions publiques (data userData $) {
        $ this-> validator-> valider ($ data);
        $ this-> userRepository-> Enregistrer ($ utilisateur);
        $ this-> e-mailservice-> SendWelcome ($ utilisateur);
    }
}

Cela rend chaque classe plus facile à tester et à modifier indépendamment.


2. Principe ouvert / fermé (OCP)

Les entités logicielles doivent être ouvertes à l'extension, mais fermées pour la modification.

Le code hérité nécessite souvent de modifier le code existant pour ajouter de nouvelles fonctionnalités - cela augmente le risque de briser quelque chose.

Que rechercher:

  • Instructions de commutation ou de chaînes IF / ELONE BASE SUR TYPE
  • Fonctions qui doivent être modifiées chaque fois qu'une nouvelle fonctionnalité est ajoutée

Comment le réflecteur:

  • Utilisez des interfaces et du polymorphisme
  • Remplacez les conditions par des modèles de stratégie ou d'usine

Exemple:

 // avant: l'ajout d'un nouveau mode de paiement nécessite de modifier ce code
Fonction ProcessPayment ($ Type, $ Montant) {
    if ($ type === 'paypal') {
        // traite PayPal
    } elseif ($ type === 'Stripe') {
        // traite la bande
    }
}

// après: s'étendre via de nouvelles classes, pas de modification
Interface Payment Processeur {
    Processus de fonction publique (Montant Float $): void;
}

Classe PayPalProcessor implémente PaymentProcessor {/ * ... * /}
Classe StripeProcessor implémente Paysprocessor {/ * ... * /}

Class PaymentService {
    Processus de fonction publique (Processeur de paiement de paiement $, Float $ Montant) {
        $ processeur-> processus (montant $);
    }
}

Vous pouvez maintenant ajouter de nouvelles méthodes de paiement sans toucher à la logique existante.


3. Principe de substitution de Liskov (LSP)

Les sous-types doivent être substituables à leurs types de base.

Cela devient souvent violent lorsque l'héritage est utilisé de manière incorrecte dans le code hérité - EG, une classe d'enfants l'emporte sur une méthode parent d'une manière qui rompt les attentes.

Que rechercher:

  • Classes d'enfants lançant NotImplementedException
  • Méthodes qui changent le comportement de manière inattendue
  • Héritage utilisé uniquement pour la réutilisation du code, pas vrai

Comment le réflecteur:

  • Favoriser la composition sur l'héritage
  • Utilisez des interfaces pour définir les contrats
  • Les hiérarchies de restructuration afin que les classes dérivées ne surprennent pas les utilisateurs

Exemple: Évitez de créer une classe Rectangle et la sous-classe en Square si la largeur du réglage affecte la hauteur de façon inattendue. Utilisez plutôt la composition ou des classes indépendantes séparées.


4. Principe de ségrégation de l'interface (ISP)

Les clients ne devraient pas être obligés de dépendre des interfaces qu'ils n'utilisent pas.

Dans Legacy PHP, vous pourriez voir de grandes interfaces ou des classes de base avec de nombreuses méthodes, forçant les implémenteurs à échouer inutilisé.

Que rechercher:

  • Interfaces avec trop de méthodes
  • Classes mettant en œuvre des méthodes dont ils n'ont pas besoin (par exemple, retourner null ou lancer des exceptions)

Comment le réflecteur:

  • Diviser les grandes interfaces en plus petites et basées sur des rôles
  • Laissez les classes implémenter uniquement ce dont ils ont besoin

Exemple:

 // avant: une grande interface
Interface Usermanagement {
    Fonction publique Save ();
    fonction publique delete ();
    fonction publique SendEmail ();
    Fonction publique GenerateReport ();
}

// après: interfaces séparées
Interface Storable {Fonction publique Save (); }
interface amovible {public function delete (); }
Interface Mailable {Fonction publique SendEmail (); }
Interface signalable {public function generateReport (); }

Classe GuestUser implémente le stockage, envoyez par la poste {}
L'administrateur de classe implémente le stockage, amovible, signalable {}

Maintenant, les cours ne dépendent que de ce qu'ils utilisent réellement.


5. Principe d'inversion de dépendance (DIP)

Dépendent des abstractions, pas des bétons.

Le PHP Legacy a souvent des dépendances codées en dur (par exemple, new Database() dans une classe), ce qui rend les tests et échangez des implémentations difficiles.

Que rechercher:

  • new mot-clé utilisé dans la logique commerciale
  • Noms de classe codés en dur dans les méthodes
  • Difficulté à moquer les dépendances dans les tests

Comment le réflecteur:

  • Injecter des dépendances via le constructeur ou la méthode
  • Utilisez des interfaces pour se découpler à partir des implémentations concrètes
  • Introduction Un conteneur DI simple si nécessaire (même l'injection manuelle aide)

Exemple:

 // avant: couplage serré
class userservice {
    Private $ dB;
    fonction publique __construct () {
        $ this-> db = new mysqldatabase (); // codé en dur
    }
}

// Après: injection de dépendance
class userservice {
    Fonction publique __construct (private databaseInterface $ db) {}

    fonction publique getuser ($ id) {
        return $ this-> db-> fetch ('utilisateurs', $ id);
    }
}

Vous pouvez maintenant injecter une base de données simulée pour tester ou passer à un autre backend de stockage.


Étapes pratiques pour refactoriser le code hérité

Vous n'avez pas besoin d'appliquer tous les principes solides à la fois. Commencez petit:

  • Écrivez d'abord les tests (s'il n'existe pas): utilisez des tests d'intégration ou d'unité pour épingler le comportement de courant.
  • Identifiez les pires délinquants : recherchez les cours de Dieu, les longues méthodes ou les zones de désabonnement élevé.
  • Refactor en petites étapes : Extraire Méthodes → Extraire Classes → Introduction Interfaces → Dépendances inversées.
  • Utiliser des outils : le phpstan, le psaume ou le recteur peuvent aider à détecter les problèmes et à automatiser un peu de refactorisation.
  • Ne visez pas la perfection : rendez-la légèrement meilleure qu'auparavant. Progrès sur la pureté.

Solid n'est pas une liste de contrôle de réécriture - c'est un état d'esprit. Dans Legacy PHP, l'application de ces principes conduit progressivement à un code plus facile à comprendre, à tester et à étendre. Commencez par SRP et DIP; Ils donnent souvent les plus grandes victoires avec le moindre risque.

Fondamentalement, ne laissez pas le parfait être l'ennemi du meilleur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel PHP
1535
276
PHP appelle AI Intelligent Voice Assistant Assistant PHP Interaction System Construction PHP appelle AI Intelligent Voice Assistant Assistant PHP Interaction System Construction Jul 25, 2025 pm 08:45 PM

L'entrée vocale de l'utilisateur est capturée et envoyée au backend PHP via l'API MediaRecorder du JavaScript frontal; 2. PHP enregistre l'audio en tant que fichier temporaire et appelle STTAPI (tel que Google ou Baidu Voice Recognition) pour le convertir en texte; 3. PHP envoie le texte à un service d'IA (comme Openaigpt) pour obtenir une réponse intelligente; 4. PHP appelle ensuite TTSAPI (comme Baidu ou Google Voice Synthesis) pour convertir la réponse en fichier vocal; 5. PHP diffuse le fichier vocal vers l'avant pour jouer, terminant l'interaction. L'ensemble du processus est dominé par PHP pour assurer une connexion transparente entre toutes les liens.

Comment utiliser PHP pour créer des fonctions de partage social PHP Partage d'interface Pratique Comment utiliser PHP pour créer des fonctions de partage social PHP Partage d'interface Pratique Jul 25, 2025 pm 08:51 PM

La méthode principale de création de fonctions de partage social dans PHP est de générer dynamiquement des liens de partage qui répondent aux exigences de chaque plate-forme. 1. Obtenez d'abord la page actuelle ou les informations d'URL et d'article spécifiées; 2. Utilisez UrLencode pour coder les paramètres; 3. Épisser et générer des liens de partage en fonction des protocoles de chaque plate-forme; 4. Afficher les liens sur l'avant pour que les utilisateurs puissent cliquer et partager; 5. Générez dynamiquement des balises OG sur la page pour optimiser l'affichage du contenu du partage; 6. Assurez-vous d'échapper à la saisie des utilisateurs pour empêcher les attaques XSS. Cette méthode ne nécessite pas d'authentification complexe, a de faibles coûts de maintenance et convient à la plupart des besoins de partage de contenu.

Comment utiliser PHP combiné avec l'IA pour obtenir la correction de texte de la syntaxe PHP détection et l'optimisation Comment utiliser PHP combiné avec l'IA pour obtenir la correction de texte de la syntaxe PHP détection et l'optimisation Jul 25, 2025 pm 08:57 PM

Pour réaliser la correction d'erreur de texte et l'optimisation de la syntaxe avec l'IA, vous devez suivre les étapes suivantes: 1. Sélectionnez un modèle ou une API d'IA appropriée, tels que Baidu, Tencent API ou bibliothèque NLP open source; 2. Appelez l'API via Curl ou Guzzle de PHP et traitez les résultats de retour; 3. Afficher les informations de correction d'erreur dans l'application et permettre aux utilisateurs de choisir d'adopter l'adoption; 4. Utilisez PHP-L et PHP_CODESNIFFER pour la détection de syntaxe et l'optimisation du code; 5. Collectez en continu les commentaires et mettez à jour le modèle ou les règles pour améliorer l'effet. Lorsque vous choisissez AIAPI, concentrez-vous sur l'évaluation de la précision, de la vitesse de réponse, du prix et du support pour PHP. L'optimisation du code doit suivre les spécifications du PSR, utiliser le cache raisonnablement, éviter les requêtes circulaires, revoir le code régulièrement et utiliser x

PHP crée un système de commentaires de blog pour monétiser la revue des commentaires PHP et la stratégie anti-brosse PHP crée un système de commentaires de blog pour monétiser la revue des commentaires PHP et la stratégie anti-brosse Jul 25, 2025 pm 08:27 PM

1. La maximisation de la valeur commerciale du système de commentaires nécessite de combiner la livraison précise de la publicité native, les services à valeur ajoutée par l'utilisateur (tels que le téléchargement d'images, les commentaires de recharge), d'influencer le mécanisme d'incitation basé sur la qualité des commentaires et la conformité de la monétisation anonyme des données de données; 2. La stratégie d'audit doit adopter une combinaison de mécanismes de filtrage des mots clés dynamiques pré-audit et de signalement des utilisateurs, complétés par une note de qualité des commentaires pour réaliser une exposition hiérarchique de contenu; 3. Anti-brosses nécessite la construction d'une défense multicouche: la vérification sans capteur RecaptChav3, le robot de reconnaissance de champ de miel, IP et la limite de fréquence d'horodatage empêchent l'arrosage, et la reconnaissance du modèle de contenu marque les commentaires suspects et itéra en continu pour traiter les attaques.

Comment utiliser PHP pour combiner l'IA pour générer une image. PHP génère automatiquement des œuvres d'art Comment utiliser PHP pour combiner l'IA pour générer une image. PHP génère automatiquement des œuvres d'art Jul 25, 2025 pm 07:21 PM

PHP n'effectue pas directement un traitement d'image AI, mais s'intègre via les API, car il est bon dans le développement Web plutôt que dans les tâches à forte intensité informatique. L'intégration de l'API peut atteindre une division professionnelle du travail, réduire les coûts et améliorer l'efficacité; 2. Intégration des technologies clés incluez l'utilisation de Guzzle ou Curl pour envoyer des demandes HTTP, le codage et le décodage des données JSON, l'authentification de la sécurité des clés de l'API, les tâches de traitement de la file d'attente asynchrones, les tâches prenant du temps, la gestion des erreurs robuste et le mécanisme de retrait, le stockage et l'affichage d'images; 3. Les défis courants incluent le coût des API incontrôlable, les résultats de génération incontrôlables, la mauvaise expérience utilisateur, les risques de sécurité et la gestion difficile des données. Les stratégies de réponse consistent à définir des quotas et des caches utilisateur, en fournissant des conseils ProTT et une sélection multi-images, des notifications asynchrones et des invites de progrès, un stockage et un audit de contenu de la variable d'environnement clé et un stockage cloud.

PHP réalise la gestion des stocks de produits de base et la monétisation de la synchronisation et du mécanisme d'alarme de l'inventaire PHP PHP réalise la gestion des stocks de produits de base et la monétisation de la synchronisation et du mécanisme d'alarme de l'inventaire PHP Jul 25, 2025 pm 08:30 PM

PHP assure l'atomicité de la déduction des stocks via les transactions de base de données et les verrous en ligne de Forupdate pour empêcher la survente élevée élevée en simultation; 2. La cohérence de l'inventaire multiplateforme dépend de la gestion centralisée et de la synchronisation axée sur les événements, combinant des notifications API / WebHook et des files d'attente de messages pour assurer une transmission fiable de données; 3. Le mécanisme d'alarme doit définir un faible inventaire, un inventaire zéro / négatif, des ventes invidables, des cycles de réapprovisionnement et des stratégies de fluctuations anormales dans différents scénarios, et sélectionner Dingtalk, SMS ou les personnes responsables par e-mail en fonction de l'urgence, et les informations d'alarme doivent être complètes et claires pour réaliser l'adaptation et la réponse rapide.

Comment utiliser PHP pour développer une plate-forme communautaire Q&A explication détaillée du modèle de monétisation communautaire interactive PHP Comment utiliser PHP pour développer une plate-forme communautaire Q&A explication détaillée du modèle de monétisation communautaire interactive PHP Jul 23, 2025 pm 07:21 PM

1. Le premier choix pour la combinaison Laravel Mysql Vue / React dans la communauté de questions et réponses de développement PHP est le premier choix pour la combinaison Laravel Mysql Vue / React, en raison de sa maturité dans l'écosystème et de l'efficacité de développement élevée; 2. Les performances élevées nécessitent une dépendance à la cache (redis), une optimisation de la base de données, des files d'attente CDN et asynchrones; 3. La sécurité doit être effectuée avec le filtrage d'entrée, la protection CSRF, les HTTP, le cryptage de mot de passe et le contrôle d'autorisation; 4. Publicité facultative, abonnement aux membres, récompenses, commissions, paiement des connaissances et autres modèles, le noyau est de faire correspondre le ton communautaire et les besoins des utilisateurs.

Au-delà de la pile de lampe: le rôle de PHP dans l'architecture d'entreprise moderne Au-delà de la pile de lampe: le rôle de PHP dans l'architecture d'entreprise moderne Jul 27, 2025 am 04:31 AM

PhpisstillRelevantinmodernerterpriseenvironments.1.modernPhp (7.xand8.x) offre des performances, des stricts, un jitcompilation, et modernsyntax, rendant la main

See all articles