Tienes problemas con el legado, ¡entonces estás de suerte! Aserrando un monolito en PHP

Introducción

A menudo me piden que hable sobre cómo trabajar con monolitos heredados. Se habla mucho sobre la arquitectura de microservicios, pero rara vez se menciona que los proyectos llegan después de años de crecimiento con una aplicación monolítica. Para cambiar la arquitectura de una solución en vivo, debe pasar por varias etapas. El autor ha trabajado con varios proyectos, tanto con una arquitectura REST completa y orientada a servicios de múltiples inquilinos, como con un enorme monolito, en cuyo repositorio hubo confirmaciones durante diez años. Este artículo trata sobre el lado oscuro, el código heredado y las soluciones prácticas a los problemas con las aplicaciones PHP monolíticas.





Razones para la aparición del legado

Hay dos razones principales para el código heredado.





La primera razón es que se lanzan nuevas versiones de sistemas operativos, idiomas, navegadores, bibliotecas. El problema es especialmente relevante para las aplicaciones móviles y los lenguajes de script: con cada lanzamiento de una nueva versión de la plataforma, es necesario solucionar los problemas de compatibilidad del código antiguo. Este proceso es estable y predecible en los próximos años.





La segunda es la deuda técnica, que se crea a propósito. La administración acorta el tiempo de desarrollo de software al evitar el diseño, las pruebas automatizadas o la revisión de código, aprueba bibliotecas de terceros que no son compatibles y los desarrolladores no documentan la lógica compleja. Esto se encuentra en todas partes y no depende de la cantidad de dinero en la cuenta de la empresa. No regañe a los malos jefes. Tienen buenas razones para hacerlo.





Los productos tienen un ciclo de vida ; el período de alta demanda de productos populares dura de tres a cuatro meses. Los competidores copiarán todo lo mejor y lo harán aún mejor, por lo que las empresas se ven obligadas a lanzar regularmente nuevos elementos. Para mantener los ingresos, se lanzan nuevos productos y revisiones cada pocos meses, por lo que las ventas del nuevo ciclo compensan la disminución de las ventas de productos al final del ciclo. Tanto Apple como Marvel realizan tres o cuatro lanzamientos importantes al año, y Oracle también tiene un ciclo de lanzamiento trimestral en el mercado SAAS empresarial. Sin embargo, no existe una receta para el éxito. El 97% de las startups desechan su producto y prueban algo nuevo antes de encontrar un producto al que compran. Por tanto, se minimiza el coste de desarrollar MVP en startups.





Estás en problemas con Legacy, ¡así que estás de suerte!

, , . . , , , . , , , , . , , , , 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