Vous avez des problèmes avec l'héritage - alors vous avez de la chance! Scier un monolithe en PHP

introduction

On me demande souvent de parler du travail avec des monolithes hérités. On parle beaucoup d'architecture de microservices, mais il est rarement mentionné que les projets y parviennent après des années de croissance avec une application monolithique. Pour changer l'architecture d'une solution live, vous devez passer par plusieurs étapes. L'auteur a travaillé sur divers projets - à la fois avec une architecture REST orientée services multi-agences à part entière, et avec un énorme monolithe, dans le référentiel duquel il y avait des commits pendant dix ans. Cet article traite du côté obscur, du code hérité et des solutions pratiques aux problèmes liés aux applications PHP monolithiques.





Raisons de l'émergence de l'héritage

Il y a deux raisons principales pour le code hérité.





La première raison est que de nouvelles versions de systèmes d'exploitation, de langues, de navigateurs et de bibliothèques sont publiées. Le problème est particulièrement pertinent pour les applications mobiles et les langages de script - à chaque sortie d'une nouvelle version de la plate-forme, il est nécessaire de résoudre les problèmes de compatibilité de l'ancien code. Ce processus est stable et prévisible pour les années à venir.





Le second est la dette technique, qui est créée exprès. La gestion réduit le temps de développement logiciel en éliminant la conception, les tests automatisés ou la révision de code, approuve les bibliothèques tierces qui ne sont pas prises en charge et les développeurs ne documentent pas la logique complexe. Cela se trouve partout et ne dépend pas du montant d'argent sur le compte de l'entreprise. Ne grondez pas les mauvais patrons. Ils ont de bonnes raisons de le faire.





Les produits ont un cycle de vie , avec une période de forte demande pour les produits populaires d'une durée de trois à quatre mois. Les concurrents copieront le meilleur et le rendront encore meilleur, de sorte que les entreprises sont obligées de publier régulièrement de nouveaux éléments. Pour maintenir les revenus, de nouveaux produits et des révisions sont publiés tous les quelques mois, de sorte que les ventes de nouveaux cycles compensent la baisse des ventes de produits à la fin du cycle. Apple et Marvel font trois ou quatre versions majeures par an, et Oracle a également un cycle de publication trimestriel sur le marché des SAAS d'entreprise. Cependant, il n'y a pas de recette pour réussir. 97% des startups jettent leur produit et essaient quelque chose de nouveau avant de trouver un produit auquel elles achètent. Par conséquent, le coût de développement de MVP dans les startups est minimisé.





Vous avez des problèmes avec Legacy, alors vous avez de la chance!

, , . . , , , . , , , , . , , , , legacy-. - legacy , , .





?

. , Wordpress , 38% -. -, . Wordpress , , .





, - , .





, ?





. .





. API . , .





, .





, . . . , , .





PHP .





Rector , .





Exakat PHP, , , .





Phan , PHP.





, , .





. PHP 5- 7- , .





. , . , , . , , . git- . , , .





- . , - , golang. - , , , . .





, - , , API, . , .





:





  • ,





  • API , ,





  • composer ,





  • , ,





  • , API.





- . . . API .





, PHP, API. , . “release, control, validation” “DevOps”. . , .





, , , .





- :





  1. - , ;





  2. API - , ;





  3. - , ;





  4. , ;





  5. ; : IoC- .





, .





, , , Packeton, git-. , Private Packagist.





composer- IoC-, : , , diff.





composer Symfony Dependency Injection IoC- . . IoC-, . IoC- .









) ,

) , .





, .





1. , , , “ ” . 





: . : , diff .





:





  • , , .





  • , , , , .





  • ,





  • , , getter-, -.





  • , .





- , . , , , , . : , , diff





2. . 





PHP (). , , / API (, diff). 





, . “”. 





: , , diff .





, -.





, , , - .





-“” () , , , composer-, .





5. . 





: , Single Responsibility Principle, . - , , . .





- -, . , , , , . - IoC-. 





: , , diff, .





6. . 





: $model = new ($modelName . ’Class’);





. , , .





switch- . , .





IoC- . , . . , .





:





  1. , , lazy.





  2. API Service Subscriber.





  3. API .





- Service Subscriber. , . : , , c , . Diff.





Service-Oriented Architecture

, , , , . - ? .





API. API restful-. - , , , . http- curl.





- :





  1. . ID , API, . .





  2. , . : . , , .





, . - . , . , . - . , , . , .








All Articles