Wie man kein Projekt auf Bitrix entwickelt

Während meiner gesamten Arbeit mit Bitrix hatte ich die Möglichkeit, mit einer sehr großen Anzahl von Projekten zu arbeiten, die jemand vor mir entwickelt hatte. Hier finden Sie kleinere Verbesserungen, die Behebung verschiedener Fehler und Fehler in der Logik, die Neugestaltung der Website und globale Änderungen an vorhandenen Funktionen. Und wie jeder andere Entwickler hasse ich es, den Müll, die Krücken und die „temporären“ Patches eines anderen zu harken, an die sich tatsächlich eine weitere 8-Ausgabe des Produkts erinnert.

Hier werde ich versuchen, mich beim Programmieren in PHP nicht auf Standard-Worst-Practices zu konzentrieren, wie z. B. die Missachtung der Auswahl von Variablennamen und -funktionen, unnötige Datenbankabfragen in einer Schleife, das Fehlen von Benutzerdatenprüfungen in Formularen, das Ignorieren von Kommentaren und dergleichen. Ich werde versuchen, genau die Momente anzusprechen, die mit der Entwicklung von Bitrix verbunden sind, um anschließend Empörung und Flüche des Programmierers, der Ihren Code begleiten musste, gegen Sie zu vermeiden. Und ja, oft werden Sie in einem Jahr oder länger selbst dieser Programmierer sein, wenn Sie völlig vergessen, warum Sie diese oder jene Krücke hier eingefügt haben.
„Schreiben Sie den Code so, als würde er von einem gewalttätigen Psychopathen begleitet, der weiß, wo Sie leben“ (c) John F. Woods
Das erste und meiner Meinung nach wichtigste ist - um Himmels willen, verwenden Sie den lokalen Ordner . Dies ist bei der Verwendung des Versionskontrollsystems einfach von entscheidender Bedeutung. Sie müssen lediglich den Ordner / bitrix / zu den Ausnahmen hinzufügen. Das ist alles. Darüber hinaus wird fast die gesamte Entwicklung nur darin durchgeführt. Dies vereinfacht die Suche nach den erforderlichen Dateien und Komponenten später erheblich, hilft, das Repository nicht mit unnötigen Dateien zu verstopfen, und verleiht dem Projektbaum ein ordentlicheres, „menschlicheres“ Aussehen.

Ändern Sie den Kernel nicht . Auch wenn Sie sicher sind, dass es nicht aktualisiert wird. Auch wenn es schneller geht. Auch wenn Sie faul sind. Vergiss diesen Gedanken wie einen Albtraum. Wenn Sie die Logik einer Standardkomponente ändern müssen, übertragen Sie sie in den neuen Namespace / local / components / modify / und arbeiten Sie damit. Gleiches gilt für Module, Gadgets und Aktivitäten von Geschäftsprozessen.

Verwerfen Sie die Datei init.php nicht . Kombinieren Sie Funktionen zum Arbeiten mit einem bestimmten Modul oder einer bestimmten Funktion in einer Klasse, schreiben Sie diese gesamte Klasse in eine separate Datei und schließen Sie in init.php nur diese Dateien ein und schreiben Sie Ereignishandler. Ich traf auf init.php-Dateien mit jeweils 500 KB, in denen Funktionen, Definition von Konstanten, Klassen und Initialisierung von Handlern in einem Durcheinander gemischt wurden. Als ich diese Dateien verstehen musste, verfluchte ich natürlich meine Vorgänger.

Der nächste Absatz befasst sich nicht mit der Entwicklung vorgefertigter Lösungen für den Marktplatz, bei denen das Ziel darin besteht, die anpassbarste Funktionalität aus dem öffentlichen Bereich für den Endbenutzer bereitzustellen. Wenn Sie an einem bestimmten Projekt oder an einem bestimmten ToR arbeiten, versuchen Sie nicht, für alle Gelegenheiten eine einheitliche Vorlage für die Komponente zu erstellen. Persönlich halte ich an einer Philosophie fest - es ist besser, ein paar einfache Vorlagen zu haben, die für andere Zwecke als eine universelle verwendet werden, bei denen sich der Teufel jedoch später das Bein bricht. Natürlich müssen Sie in jedem Fall auf den Vorgaben, Implementierungsoptionen und dergleichen aufbauen, aber Sie sollten das Rasiermesser des Occam nicht vergessen. Als Beispiel werde ich ein Projekt einer Leasinggesellschaft nennen, das ich zufällig bearbeitet habe. Das Projekt selbst wurde natürlich schrecklich umgesetzt, zum wirklichen Entsetzen auf den Seiten eines Abschnitts des Servicekatalogs. Jeder der fünf Abschnitte hatte ein eigenes Layout, in dem sich sowohl die Position der Blöcke auf der Seite als auch im Prinzip das Vorhandensein einiger von ihnen unterschieden. Und für alle fünf Seiten wurde eine Vorlage mit einer Reihe von if-else-Duplikaten von Komponentenaufrufen, Verbindungsstilen und Skripten verwendet, die außerdem in regelmäßigen Abständen miteinander in Konflikt standen. Infolgedessen war eine riesige Datei, in der man "ohne Bier" verstehen konnte, wie der Tod. Obwohl, wie es scheint, was Sie daran gehindert hat, 5 verschiedene Vorlagen zu erstellen und keine Probleme aus heiterem Himmel zu schaffen?

Verwenden Sie die API . Erfinden Sie das Rad nicht neu, wenn es nicht benötigt wird. Verwenden Sie die Dokumentation - das gesamte Produkt ist ziemlich gut beschrieben, und auch jede Funktion kann auf bxapi.ru detailliert angezeigt werden.

Vermeiden Sie direkte Datenbankabfragen . Dies ist ein Sonderfall des vorherigen Absatzes - verwenden Sie die API. Hastige, unsichere Anfragen können zu Datenbeschädigung, -verlust oder sogar zu Kompromissen führen.

Verwenden Sie keine CNC-Komponenten aus dem Stammverzeichnis der Site . Die Konsequenzen sind in der Regel ziemlich traurig, da die CNC eine Adresshandlerdatei verwendet. Ein Versuch, sie vom Stamm aus zu verwenden, bricht leicht die Adresse anderer Komponenten sowie 404 Seiten. Es ist nichts falsch, wenn die Artikel, die Sie haben, an den Ordner / articles / adressiert sind und die Produkte relativ zu / catalog / sind.

Verbinden Sie CSS und JS über die API. Ich sehe immer noch überall Skripte und Stylesheets, die HTML-Tags verwenden. Verwenden Sie das Klassenobjekt \ Bitrix \ Main \ Page \ Asset und die Funktionen addJs () und addCss (). Auf diese Weise können Sie Dateien kombinieren und anschließend mit einem Klick auf das Kontrollkästchen in den Einstellungen des Hauptmoduls zwischenspeichern

Und schließlich betrifft der Fehler nicht nur Bitrix, sondern es war bereits zu schmerzhaft für mich, auf damit verbundene Probleme zu stoßen. Überprüfen Sie, ob das Array mit den Ergebnissen der Auswahl ungültig ist . Das letzte Mal, als ich auf dieses Problem stieß, war die Arbeit mit einem Online-Shop. Beschwerde: Seiten werden manchmal 16 Sekunden lang geladen. Was damit verbunden ist, ist nicht klar. Durch Versuch und Irrtum fand ich heraus, dass die Seiten nur dann unangemessen lang geladen werden, wenn der Warenkorb leer ist. Es schien, warum? Wie sich herausstellte, erschien beim Schweben ein Popup-Fenster im Warenkorb, in dem Bilder der in den Warenkorb gelegten Waren angezeigt wurden. Was hat der vorherige Entwickler getan? Ich habe das Ergebnis der Komponente "kleiner Korb" genommen und in der Datei result_modifier.php einen GetList () -Aufruf für die Waren ausgeführt, um Bilder mit einem Filter aus dem Array von Produkt-IDs auszuwählen, und dann src-Bilder aus den Auswahlergebnissen zum Array des entsprechenden Produkts hinzugefügt. Wenn sich keine Waren im Warenkorb befanden, wurde der Filter leer gelassen, und der GANZE Warenkatalog fiel in die Auswahl. Nun, dann ein Zyklus für jeden und ... wir haben was wir haben. Es ist klar, dass dies in der Entwicklungsphase mit Test 15-Produkten nicht wahrnehmbar war und Probleme bereits unter Kampfbedingungen auftraten. Obwohl es den Anschein hat, dass es sich gelohnt hat, den Scheck leer zu setzen ($ arResult ['ITEMS']) ...

Hier beende ich meine persönliche Top-Worst-Practice in Bezug auf die Bitrix-Entwicklung. Wenn zumindest jemand diese Informationen dazu beiträgt, Fehler in der Zukunft zu vermeiden und seinen Entwicklungsstil zu verbessern, war dies nicht umsonst.

Source: https://habr.com/ru/post/de418245/


All Articles