Hallo! Bevor Sie beginnen, nur eine Anmerkung: Ich habe schon lange nicht mehr geschrieben. Ich habe schon seit Ewigkeiten damit gedroht, und schließlich ist mir klar geworden, dass dies ein ebenso gutes Thema für den Anfang ist wie jedes andere. Ich bin etwas eingerostet, aber ich werde versuchen, weiterzumachen und mich hoffentlich zu verbessern.
EventPress ist wahrscheinlich das Größte, woran ich arbeite. Ich war von Anfang an dabei und die App ist in den letzten 10 Jahren durch drei Hauptversionen exponentiell gewachsen. Version 4 liegt jetzt auf dem Tisch und es gibt ein paar Änderungen, die ich gerne ändern würde, während wir daran arbeiten.
Zuerst ein wenig Geschichte. EventPress gehört HotPress Media und wurde gestartet, weil ein Kunde eine einfache Lösung für die Verwaltung von Event-RSVPs wünschte, die seine Excel-Tabelle ersetzen könnte. Diese erste Version von EventPress war hässlich. Es gab keine Vorgaben, wir führten das Projekt ohne einen richtigen Plan durch und hatten am Ende eine riesige Schüssel Spaghetti. Aber es hat funktioniert und es hat geholfen, bei einem der größten Unternehmen Südafrikas Fuß zu fassen.
Version 2 war ein großer Sprung. An der Benutzeroberfläche haben wir nicht viel geändert, aber das zugrunde liegende Framework hat eine große Änderung erfahren. EventPress wurde auf Laravel (damals Version 5) verschoben, und obwohl ein Großteil des Codes von Version 1 auf Version 2 übertragen wurde, war die Struktur viel besser und wir hatten weitaus weniger Probleme. Damals hatten wir noch keinerlei Testsuite und wir haben die Dinge grundsätzlich auf der Basis „Es funktioniert auf meinem Rechner“ getestet. Nicht großartig.
Version 3 brachte eine komplette Überarbeitung der Benutzeroberfläche und Tailwind wurde zum bevorzugten CSS-Framework. Es wurde viel Code geändert, obwohl sich immer noch eine ganze Menge Code der Version 1 in dunklen Ecken versteckte. Eine große Änderung gegenüber Version 3 war ein brandneues Vertriebssystem. Während dieser Umstellung haben wir viel über das Versenden von Massenmails gelernt.
Ein Großteil der öffentlich zugänglichen Benutzeroberfläche war eine direkte Kopie von Version 2. Auch jetzt noch ist vieles, was die Teilnehmer sehen, noch Code der Version 2. Stattdessen brachte Version 3 viel mehr Struktur in die Codebasis. Es kam eine gewisse Logik zum Vorschein. Wir haben dünne Controller geschrieben und uns stark auf den Service-Container gestützt. Version 3 war auch die erste Version von EventPress, die über eine Testsuite verfügte.
Ich schreibe schon lange PHP-Code, bin aber Autodidakt. EventPress war, als würde man ins kalte Wasser geworfen, ohne eine Anleitung zum Schwimmen. Es war eine gewaltige Lernkurve, aber sie hat mich dahin gebracht, wo ich heute bin. Ich habe dieses Ding selbst gebaut, mit sehr wenig Input von anderen Entwicklern.
Dieses Mal werde ich mich durch die Entwicklung von EventPress 4 bloggen. Nicht weil ich nach Zustimmung suche, sondern weil ich es dieses Mal aufzeichnen möchte. Und vielleicht könnten meine Lösungen anderen Solo-Entwicklern helfen. Ich habe viel über das Erstellen und Ausführen großer PHP-Anwendungen gelernt.
EventPress 4 wird eine große Neufassung sein. Obwohl ein großer Teil des EventPress 3-Codes in Version 4 landen wird, handelt es sich dabei nicht nur um ein Kopieren und Einfügen. Ich denke, es ist an der Zeit, endlich all die veralteten Teile loszuwerden, die seit Version 1 hängengeblieben sind; Ich möchte eine robustere Testsuite. und ich möchte einige neuere Technologien nutzen.
Mein Plan ist es, mindestens einmal im Monat etwas zu schreiben, während ich daran arbeite. Ich werde versuchen, mich zu zwingen, weiterzumachen.
Also Kopf voran, rein ins Getümmel...
EventPress 4 wird keine neue Benutzeroberfläche erhalten. Wir werden fast die gesamte Benutzeroberfläche von Version 3 verwenden und vielleicht hier und da ein paar kleinere Änderungen vornehmen. Die Benutzeroberfläche von EventPress wurde mit Vue 3 erstellt und Tailwind and Inertia ist unser Kleber der Wahl.
EventPress 4 wird eine 1-zu-1-Funktionskopie von Version 3 sein. Das bedeutet, dass Version 3 im Zuge der Weiterentwicklung von Version 3 in den nächsten Monaten parallel dazu weiterentwickelt werden muss. Im Moment ist es aber nur ein bisschen Planung.
Zunächst habe ich mir angeschaut, wo es in Version 3 noch Probleme gab, und mir einige Notizen gemacht, wie diese Elemente in Version 4 verbessert werden könnten. Ich habe mir eine Vorstellung davon gemacht, wie ich an die Erstellung dieser Version von herangehen möchte EventPress. Es gibt etwas Vertrautes und einige brandneue Dinge:
Da gibt es einige interessante Möglichkeiten, ich weiß. Das Octane-Gerät ist für uns ein großes Problem, da wir so etwas noch nie zuvor verwendet haben. Octane ist ein Erstanbieterpaket für Laravel, das Ihnen hilft, Ihre App auf einem PHP-Anwendungsserver auszuführen. Swoole, RoadRunner und FrankenPHP werden unterstützt. Wir haben uns alle drei Optionen angesehen und uns vorerst für FrankenPHP entschieden. Es ist neuer als die anderen beiden, bietet aber eine wirklich gute Leistung. Swoole bietet gleichzeitige Mitarbeiter an, was nett ist, aber nicht etwas, was wir für nötig halten. Der entscheidende Faktor war jedoch, dass die Swoole-Erweiterung installiert werden musste. Das können wir von unseren Unternehmenskunden nicht erwarten. Ich habe auch etwas Erfahrung mit FrankenPHP, das machte also Sinn.
Wir verwenden Nginx seit Jahren. Es ist großartig und ich kann es nicht genug empfehlen. Da FrankenPHP jedoch über einen eigenen Caddy-Server verfügt, experimentieren wir auch damit. Wir bleiben vielleicht nicht beim Caddy, aber vorerst steht er auf der Liste.
PHP 8.4 wurde noch nicht veröffentlicht, aber da EventPress 4 noch eine Weile nicht verfügbar sein wird, war es sinnvoll, mit der neuesten Version zu beginnen, die wir können. Zum Zeitpunkt des Schreibens ist PHP 8.4 etwa einen Monat von der Veröffentlichung entfernt, daher verwenden wir den neuesten Release Candidate.
InertiaJS 2 ist fast die gleiche Geschichte. Es befindet sich ebenfalls in der BETA-Phase, aber da wir noch weit von der Veröffentlichung entfernt sind, wird es wahrscheinlich lange vor EventPress erhältlich sein. Außerdem haben wir InertiaJS 1 in der BETA lange Zeit ohne Probleme ausgeführt.
Ich bin ein neuer Konvertit zur statischen Analyse. Das meiste, was ich verwendet habe, ist das Zeug, das mir PHPStorm als Code zur Verfügung stellt. Für EventPress 4 haben wir uns entschieden, Vollgas zu geben und PHPStan mit einzubeziehen. PHPStan ist ein statischer Analysator eines Drittanbieters für PHP. Es ist kinderleicht zu konfigurieren und hat mir geholfen, ein paar Fehler in einer Reihe anderer Projekte auszumerzen.
Aufgrund der Größe von EventPress macht es auch hier Sinn. Damit dies funktioniert, habe ich ein test:types Composer-Skript hinzugefügt, das ich jederzeit ausführen und dem CI-Skript hinzufügen kann.
Ich habe noch nie einen PHP-Code-Linter ausgeführt. Ich habe PHP Mess Detector ein paar Mal verwendet, bin aber nie wirklich damit klargekommen. Für EventPress 4 haben wir entschieden, dass ein Linter dazu beitragen wird, den Code sauber und konsistent zu halten. Wir haben uns für Laravels eigenes „Pint“ entschieden, das eigentlich nur ein Wrapper um PHP-CS-Fixer ist und eine wirklich einfache Möglichkeit bietet, unseren Code aufgeräumt zu halten. Auch hier habe ich die Composer-Skripte lint und test:lint hinzugefügt, um die Ausführung zu vereinfachen.
Ich arbeite während der Entwicklung sowohl auf Mac- als auch auf Linux-Rechnern. Ich habe einen M1 Max auf meinem Schreibtisch, den ich schon seit ein paar Jahren habe, und ein paar Linux-Rechner sind im Büro verstreut. Mein Haupttreiber ist der Mac und dort erledige ich den Großteil meiner Entwicklungsarbeit, aber mein gesamter Code läuft auf Linux-Rechnern. Normalerweise Ubuntu Server.
EventPress 4 fügt dem Puzzle ein paar neue Teile hinzu, aber ich denke, dass ich mich größtenteils so weiterentwickeln kann, wie ich es derzeit tue. Ich verwende Homebrew, um die meisten Tools zu installieren, und Laravel Valet, um lokale Entwicklungsumgebungen auszuführen. Ich bin kein Laravel Herd-Benutzer (es ist gut, aber ich fühlte mich eher wie ein Herd Pro-Benutzer und ich kann es nicht rechtfertigen, 99 US-Dollar pro Jahr für ein Tool auszugeben, das alles kann, was ich bereits kann, nur etwas schneller und besser verpackt eine schöne Benutzeroberfläche).
Mein Plan ist also, eine eventpress4.test-Domäne mit einer MySQL-Datenbank auf meinem lokalen Computer laufen zu lassen. Ich werde diesen Zustand während der frühen Entwicklung eine Zeit lang verwenden und alle paar Tage oder so einige Tests mit Octane durchführen. Sobald wir den ersten Teil abgeschlossen haben, werden wir mit der Entwicklung regelmäßiger mit Octane beginnen. Wir hosten einen Testserver, auf dem die App so ausgeführt wird, wie wir sie in der Produktion ausführen möchten.
EventPress wurde noch nie in Containern verpackt. EventPress 4 wird jedoch wahrscheinlich in diese Richtung gehen. Wir experimentieren noch mit ein paar Dingen, haben aber mit einigen unserer Unternehmenskunden Gespräche geführt und sind der Meinung, dass dies dazu beitragen wird, den Bereitstellungsprozess für sie erheblich zu vereinfachen. Wir führen einige frühe Tests durch, bei denen EventPress 3 in einem Docker-Container ausgeführt wird, und wir glauben, dass dies der richtige Schritt für alle zukünftigen Versionen von EventPress sein wird.
Seit Jahren verlassen wir uns stark auf GitLab als CI/CD-Dienst unserer Wahl. GitLab führt eine Reihe komplexer CI-Pipelines aus und führt die Bereitstellung für fast jedes Projekt durch, an dem ich arbeite.
Allerdings bin ich auch seit vielen Jahren GitHub-Nutzer. Ich habe es hauptsächlich für meine Open-Source-Arbeit verwendet, habe aber kürzlich damit begonnen, einige kleinere Projekte auf ein kostenpflichtiges GitHub-Konto zu verschieben, und ich war super beeindruckt. Es gibt ein paar Dinge, die ganz anders funktionieren als GitLab, aber in den meisten Aspekten bin ich wirklich zufrieden.
Der EventPress 4-Code wird also auf GitHub gehostet und wir verwenden Aktionen für die CI-Pipeline und alle Bereitstellungen.
Ich denke, das war’s für diesen Beitrag. Es gibt noch einige Planungen, aber ich habe begonnen, etwas Code zu schreiben und einige Tests zu schreiben. Ich habe bereits eine grundlegende Authentifizierungsschicht eingerichtet (Danke, Laravel), obwohl das meiste davon EventPress 3 ähnelt. Ich werde im nächsten Teil etwas Code zeigen. Versprochen!
Das obige ist der detaillierte Inhalt vonErstellen von EventPress Teil 1. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!