Maison  >  Article  >  outils de développement  >  Explication détaillée de la façon dont Composer+Git crée une « bibliothèque de classes de service »

Explication détaillée de la façon dont Composer+Git crée une « bibliothèque de classes de service »

藏色散人
藏色散人avant
2022-02-05 05:00:332089parcourir
Cet article est écrit par la colonne didacticiel composer pour vous présenter comment Composer combine Git pour créer une "bibliothèque de classes de service". J'espère que cela sera utile aux amis dans le besoin !

Introduction

J'ai toujours cru que PHP avait désormais progressé dans le domaine de l'ingénierie. Dans le passé, les développeurs PHP considéraient la vitesse comme une beauté, et vitesse et évolutivité étaient toujours contradictoires. Les projets PHP d'aujourd'hui, en particulier les projets de plus grande envergure, ont progressivement évolué vers un niveau qui nécessite à la fois de l'ingénierie et de l'échelle. Ingénierer un code, c’est évoluer vers une architecture de plus en plus complexe. Pour les architectures complexes, les microservices sont souvent un bon choix.

J'avais besoin de cette question dans un projet récent. J'ai besoin de développer un service de cartographie. Ce service ne se présente bien sûr pas sous la forme d'une simple bibliothèque de classes, mais possède sa propre base de données et sa propre interface de service. Dans ce cas, la meilleure option est la servitisation. Bien sûr, il existe de nombreuses façons de fournir des services, telles que Thrift, HTTP, etc. Mais j'ai évalué l'environnement actuel du département. PHP est le langage dominant, et la progression de mon projet est également relativement serrée. À mes yeux, Thrift, HTTP et d'autres méthodes utilisent toutes des protocoles réseau pour réaliser le découplage des services. solution. Je pense que cette approche n'est pas nécessaire lorsque le projet n'est pas clairement dans un état critique. L’inconvénient de l’utilisation de la servitisation du protocole réseau est qu’elle introduit une complexité significative. Cette complexité nécessite souvent un investissement en main d’œuvre, en ressources matérielles et en temps. J'espère donc pouvoir fournir une "bibliothèque de classes de service" dans le langage PHP pour le développement.

Ce à quoi je pense, c'est le Composer de PHP.

Modification du compositeur

Créer une bibliothèque de services

Tout d'abord, je dois séparer ma "bibliothèque de services" de mon application (nommée xxx/main1). Cette indépendance, j'ai au lieu de choisir de créer un répertoire à l'intérieur. l'application (en fait j'ai pensé à créer un répertoire tel que Services). Cependant, si le code est couplé au programme commercial, j'estime qu'en raison de la paresse humaine, il est difficile de se contrôler du début à la fin et d'insister pour ne pas utiliser diverses fonctions pratiques dans l'application. Mon choix est donc de créer un nouveau projet dans le référentiel Git et de le nommer xxx/mapService.

composer.json

Il y a maintenant deux projets Git (xxx/main1 et xxx/mapService). J'ai ajouté l'instruction suivante au fichier composer.json dans main1 :

Explication détaillée de la façon dont Composer+Git crée une « bibliothèque de classes de service »

Et dans le composer.json de). mapService Comme suit :

Explication détaillée de la façon dont Composer+Git crée une « bibliothèque de classes de service »

Cette configuration indique le projet main1, l'adresse Git de mapService et la version qui doit être utilisée.

Bien sûr, vous devez faire attention aux points suivants :

  • dev-master signifie utiliser directement la branche master de mapService. Si mapService a d'autres balises, vous pouvez utiliser les informations de balise ici
  • repositories est l'adresse du projet
  • Le service que j'ai ici est placé sur le GitLab construit par notre société
  • L'espace de noms du dossier src sous mapService pour xxxx \xxxx\MapService\ et le support PSR-4
  • mapService utilise illuminate/database

Enfin, utilisez composer update -vvv pour télécharger le mapService dont nous avons besoin et placez-le dans le répertoire du fournisseur.

Mises à jour et modifications

Notre éditeur actuel est dans le projet main1. Si nous éditons ou modifions le projet mapService et que nous souhaitons le fusionner dans la branche master de mapService, nous pouvons entrer directement dans le répertoire vender/xxx/mapService. Effectuez les opérations correspondant à Git. Cela permet des modifications directes du code.

Configuration indépendante

Cette combinaison structurelle n'est que la première étape pour achever la longue marche de milliers de kilomètres. Ce qui est plus important plus tard, c'est que lors de l'écriture de ce service, je dois toujours me rappeler de ne pas tout utiliser dans main1, afin de maintenir l'indépendance de mapService (l'indépendance est l'une des conditions nécessaires à la servitisation). Par exemple, le premier problème que j’ai rencontré était que le fichier de configuration devait être indépendant.

Ma méthode d'implémentation consiste à créer une classe Config directement dans mapService, et la configuration est directement écrite dans cette classe.

J'ai toujours pensé que l'implémentation de ce fichier de configuration était un peu frustrante, car de cette façon, ce fichier de configuration entre dans la bibliothèque Git. Mais je ne peux vraiment pas penser à une meilleure solution. Il existe un moyen dans Laravel de créer Config dans le dossier de configuration de Laravel en implémentant ServiceProvider, mais cette méthode ne s'applique qu'à Laravel. Il n’y a pas d’universalité. D'un autre côté, je pense que la base de données utilisée par le service fait elle-même partie du service, et cela ne semble rien avoir à voir avec sa mise dans la bibliothèque Git du service. "Structure des répertoires" Interaction avec la base de données

Node.php implémente une interface spécifique

La chose la plus importante à propos du service est le protocole d'interface. Créez donc un dossier Contrats et interfacez les services fournis.

Explication détaillée de la façon dont Composer+Git crée une « bibliothèque de classes de service »

La gestion des exceptions de l'interface doit essayer d'utiliser des exceptions au lieu de codes d'erreur pour l'interaction. Et ces exceptions doivent être personnalisées autant que possible. De cette manière, il existe la possibilité d’un traitement unifié au niveau supérieur.
  • Réflexion
  • Je positionne ce modèle architectural comme un modèle orienté service au niveau du code PHP. Les scénarios applicables devraient être :
  • Planification ultérieure basée sur les services
  • Scénarios dans lesquels la main-d'œuvre et la réflexion initiales souhaitent maintenir un développement rapide

La différence entre le sous-arbre et le sous-module de Git

Explication détaillée de la façon dont Composer+Git crée une « bibliothèque de classes de service »En fait, ces trois méthodes sont les mêmes dans la fin Utilisez un projet comme bibliothèque de classes pour un autre projet. SubTree et SubModule sont des solutions Git. Composer est une solution pour le langage PHP En plus de la fonction d'ajout d'un projet à un autre projet, il fournit également des solutions telles que l'ajout de versions et de solutions de dépendances. Si votre projet est en PHP, utiliser Composer est sans aucun doute un meilleur choix.

Serviceisation ultérieure du protocole

Si mon mapService souhaite devenir un service de protocole plus tard, alors ce projet mapService peut être simplifié en un SDK. Pour la logique métier de couche supérieure, utilisez simplement composer update pour le mettre à jour.

Enregistrement et découverte des services
  • La soi-disant "bibliothèque de classes de services" que j'appelle ici ne résout pas le problème de l'enregistrement des services. Je n'ai aucun moyen de savoir combien de projets utilisent mon service. Cela peut nécessiter un travail de processus supplémentaire.

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer