Sie haben Probleme mit dem Erbe - dann haben Sie Glück! Sägen eines Monolithen in PHP

Einführung

Ich werde oft gebeten, über die Arbeit mit alten Monolithen zu sprechen. Es wird viel über Microservice-Architektur gesprochen, aber es wird selten erwähnt, dass Projekte nach Jahren des Wachstums mit einer monolithischen Anwendung dazu kommen. Um die Architektur einer Live-Lösung zu ändern, müssen Sie mehrere Phasen durchlaufen. Der Autor hat mit verschiedenen Projekten gearbeitet - sowohl mit einer vollwertigen, serviceorientierten REST-Architektur mit mehreren Mandanten als auch mit einem riesigen Monolithen, in dessen Repository zehn Jahre lang Commits stattfanden. In diesem Artikel geht es um die Schattenseiten, den Legacy-Code und praktische Lösungen für Probleme mit monolithischen PHP-Anwendungen.





Gründe für die Entstehung des Erbes

Es gibt zwei Hauptgründe für Legacy-Code.





Der erste Grund ist, dass neue Versionen von Betriebssystemen, Sprachen, Browsern und Bibliotheken veröffentlicht werden. Das Problem ist besonders relevant für mobile Anwendungen und Skriptsprachen. Mit jeder Version einer neuen Version der Plattform müssen die Kompatibilitätsprobleme des alten Codes behoben werden. Dieser Prozess ist für die kommenden Jahre stabil und vorhersehbar.





Die zweite ist die technische Verschuldung, die absichtlich entsteht. Das Management verkürzt die Zeit für die Softwareentwicklung, indem Design, automatisierte Tests oder Codeüberprüfung entfallen, Bibliotheken von Drittanbietern genehmigt werden, die nicht unterstützt werden, und Entwickler dokumentieren keine komplexe Logik. Dies ist überall zu finden und hängt nicht vom Geldbetrag auf dem Konto des Unternehmens ab. Schimpfe nicht mit schlechten Chefs. Sie haben gute Gründe dafür.





Produkte haben einen Lebenszyklus , die Zeit der hohen Nachfrage nach beliebten Produkten dauert drei bis vier Monate. Die Wettbewerber werden alles Gute kopieren und es noch besser machen, sodass Unternehmen gezwungen sind, regelmäßig neue Artikel zu veröffentlichen. Um den Umsatz aufrechtzuerhalten, werden alle paar Monate neue Produkte und Revisionen veröffentlicht, sodass die Verkäufe neuer Zyklen den Rückgang der Produktverkäufe am Ende des Zyklus ausgleichen. Sowohl Apple als auch Marvel veröffentlichen drei oder vier Hauptversionen pro Jahr, und Oracle hat auch einen vierteljährlichen Veröffentlichungszyklus auf dem SAAS-Markt für Unternehmen. Es gibt jedoch kein Erfolgsrezept. 97% der Startups werfen ihr Produkt weg und probieren etwas Neues aus, bevor sie ein Produkt finden, bei dem sie kaufen. Daher werden die Kosten für die Entwicklung von MVP in Startups minimiert.





Du hast Probleme mit Legacy, also hast du Glück!

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