Große Python-Projekte entwickeln sich oft zu komplexen Codebasen, die schwer zu warten sind. Den Überblick über Importe, Ebenen und die Abhängigkeiten von wem zu behalten, kann schnell zu einem Durcheinander führen. Deply ist hier, um zu helfen. Es analysiert Ihre Codestruktur und erzwingt Architekturregeln, um sicherzustellen, dass Ihr Python-Projekt sauber, modular und leicht zu warten bleibt – auch wenn es wächst.
Die Flexibilität von Python macht es einfach, Spaghetti-Code einzuführen, wenn wir nicht aufpassen. Das Hinzufügen neuer Module, Dekoratoren oder sogar die Änderung der Art und Weise, wie Klassen vererbt werden, kann bei großen Teams zu subtilen Abhängigkeitsproblemen führen. Klare Grenzen – durch automatisierte Prüfungen durchgesetzt – tragen dazu bei, die Codequalität hoch zu halten. Dieser Ansatz steigert die Lesbarkeit und Teamproduktivität.
Deply ist ein eigenständiges Tool, das:
Der Vorteil von Deply besteht darin, dass es über Importe hinausgeht und Dekoratoren, Klassenvererbung, Dateimuster und mehr berücksichtigt. Seine YAML-basierte Konfiguration erleichtert die Integration in CI-Pipelines, ohne neue Testdateien schreiben zu müssen.
pip install deply
Sie erhalten die neueste Version, derzeit 0.5.2.
Erstellen Sie eine deply.yaml-Datei in Ihrem Projektstammverzeichnis. Definieren Sie mindestens die Pfade, die Sie analysieren möchten, alle auszuschließenden Dateien, Ihre Ebenen und Regeln. Unten finden Sie einen Beispielausschnitt für ein Django-ähnliches Projekt.
deply: paths: - /path/to/your/project exclude_files: - ".*\.venv/.*" layers: - name: models collectors: - type: bool any_of: - type: class_inherits base_class: "django.db.models.Model" - type: class_inherits base_class: "django.contrib.auth.models.AbstractUser" - name: views collectors: - type: file_regex regex: ".*/views_api.py" ruleset: views: disallow_layer_dependencies: - models enforce_function_decorator_usage: - type: bool any_of: - type: bool must: - type: function_decorator_name_regex decorator_name_regex: "^HasPerm$" - type: function_decorator_name_regex decorator_name_regex: "^extend_schema$" - type: function_decorator_name_regex decorator_name_regex: "^staticmethod$"
Wie es funktioniert:
Sobald Ihre Konfiguration fertig ist, führen Sie Folgendes aus:
pip install deply
deply: paths: - /path/to/your/project exclude_files: - ".*\.venv/.*" layers: - name: models collectors: - type: bool any_of: - type: class_inherits base_class: "django.db.models.Model" - type: class_inherits base_class: "django.contrib.auth.models.AbstractUser" - name: views collectors: - type: file_regex regex: ".*/views_api.py" ruleset: views: disallow_layer_dependencies: - models enforce_function_decorator_usage: - type: bool any_of: - type: bool must: - type: function_decorator_name_regex decorator_name_regex: "^HasPerm$" - type: function_decorator_name_regex decorator_name_regex: "^extend_schema$" - type: function_decorator_name_regex decorator_name_regex: "^staticmethod$"
Alle Klassen in der Serviceschicht müssen mit Service. enden.
deply analyze
Alle Funktionen in Aufgaben müssen mit task_ beginnen.
Profi-Tipp: Kombinieren Sie mehrere Bedingungen mit bool, um eine erweiterte Logik zu bilden (muss, irgendein_von, darf_nicht), um sicherzustellen, dass Sie hochspezifische Regeln erstellen können.
Fügen Sie Ihrer CI-Pipeline einen Schritt hinzu:
service: enforce_class_naming: - type: class_name_regex class_name_regex: ".*Service$"
Ihre Pipeline kann ausfallen, wenn Architekturverstöße festgestellt werden.
Deply soll Ihnen dabei helfen, Architekturverstöße zu erkennen, bevor sie zu zeitaufwändigen Refaktoren führen. Durch die Automatisierung dieser Prüfungen können Sie auch bei großen Teams ein klares, vielschichtiges Design beibehalten.
Testen Sie es gerne und passen Sie die Konfiguration an Ihre eigenen Bedürfnisse an. Wenn Sie Fragen oder Ideen haben, sehen Sie sich das Repo an, um Einzelheiten zum Einreichen von Problemen oder zum Mitwirken zu erfahren. Viel Spaß beim Codieren!
Das obige ist der detaillierte Inhalt vonDeply: Halten Sie Ihre Python-Architektur sauber. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!