PHP Modul-Entwicklung - Best practices und Vorschläge

Moin Zusammen,

nachdem mein erstes Modul (Telegram) soweit nutzbar ist würde ich gerne etwas größeres angehen (was wird noch nicht verraten). Da während der Entwicklung einige Fragen bei mir aufgetaucht sind würde ich gerne mal Euren Workflow kennenlernen.

[HR][/HR]
Wie genau entwickelt Ihr PHP-Module für Symcon?

Ich habe ganz am Anfang die entsprechende Modulstruktur direkt im /modules-Verzeichnis von IPS erstellt und drauf los programmiert. Das funktioniert soweit auch, aber neue Funktionen der Klasse stehen erst nach einem Neustart von IPS zur Verfügung. Nächster Versuch dann mit einem Git-Repository. Das klappt natürlich wunderbar, aber für jedes fehlende Semikolon muss ich einen Commit machen und das Modul neu laden? Geht das nicht irgendwie einfacher?

Es spricht ja überhaupt nichts gegen Git, ich nutze es gerne und viel. Aber ich würde gerne nur „Meilensteine“ commiten und nicht jeden winzigen Bugfix. Zumal dieser Commit-Reload-Cycle doch unnötig viel Zeit verbraucht. Habe ich was übersehen?

[HR][/HR]
Konfigurationsformulare

Es wäre schon wenn die Formulare etwas mehr Möglichkeiten beim Layout hätten. Sie nutzen nur einen kleinen Bereich links, egal wie groß das Fenster der Konsole wird. Bei Textfeldern darf die Caption z.B. nur relativ kurz sein, sonst wird sie von der Textbox verdeckt.

Schön wäre auch, wenn man im Formular einen Hilfe-Link (z.B. auf das Readme) einbinden könnte (für unfassendere Erklärungen zur Konfiguration).

[HR][/HR]
Freue mich auf Eure Kommentare!

Moin Titus.

Ich gehe wiefolgt vor.

Grobstruktur aufbauen
Verzeichnisstruktur/module.json erstellen und Werte setzen.

Überlegen welche Properties/Variablen benötigt werden und erstelle neben der module.php -> Create() auch sehr schnell die form.json.

Dann beginnt es schon mit den ersten Funktionen.
Generell gilt für mich dabei:
Doppelter Code -> neue Funktion

Und dann Schrittweise erweitern und testen.
Und zwischendurch immer wieder formatieren und refactoring.

Ich arbeite z.b. gänzlich ohne Git Commit in den Zwischenversionen.
Man kann ja lokal alles im Modules Ordner verändern und Entwicklungsschritte eiskalt reinkopieren.
Erst wenn eine Version getestet und für gut befunden ist, kommt diese ins Repo.

Wenn in schon VORHANDENEN Funktionen (nicht Create/ApplyChanges) was geändert wird, ist kein Neustart von IPS nötig.
Ein Neustart von IPS für neue Funktionen ist leider nötig. Da kann man auch nichts ändern.

Die Sache mit den Formularen wird sicherlich noch besser mit der Zeit. Wir haben da vielleicht 1-2 Ideen.
Was irgendwann kommen wird sind so kleine Infofelder.
Wann? Keine Angabe! :cool:

Grüße
Pio

Ich arbeite bei meinen Modulen mit zwei Git-Repositories.
Stable auf Github
Devel auf ner Gogs Instanz im LAN

Die Änderungen im Code werden beim speichern per SFTP auf das Symcon Entwicklungssystem kopiert.

Wenn das Ziel für ein Update der Stable erreicht ist, merge ich von Devel in Stable und commite an Github.

Ab er 4.1 hast du MC_ReloadModule - Das löst das „Reload“ Problem und du brauchst nicht ständig commiten. Außerdem unterstützt die 4.1 mehrere Branches. Du kannst also auf develop entwickeln und dann nach master mergen, sobald du einen guten Stand hast.

paresy

Das ist Top!