Heim > Backend-Entwicklung > Python-Tutorial > Deply: Halten Sie Ihre Python-Architektur sauber

Deply: Halten Sie Ihre Python-Architektur sauber

Barbara Streisand
Freigeben: 2024-12-30 12:26:09
Original
658 Leute haben es durchsucht

Deply: keep your python architecture clean

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.

Warum architektonische Durchsetzung wichtig ist

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.

Was ist Deply?

Deply ist ein eigenständiges Tool, das:

  1. Ermöglicht die Definition von Projektebenen (wie Ansichten, Modelle, Dienste) in einer YAML-Konfiguration.
  2. Sammelt Codeelemente in diesen Ebenen durch Regeln (z. B. class_inherits, decorator_usage, file_regex).
  3. Erzwingt Architekturrichtlinien, um unerwünschte Kopplungen oder Benennungsfehler zu verhindern.

Warum nicht ein anderes Tool verwenden?

  • pydeps: Konzentriert sich auf die Visualisierung von Importen.
  • import-linter: Überprüft Importbeschränkungen.
  • pytestarch oder pytest-archon: Verlässt sich auf das Schreiben codebasierter Tests für die Architektur.
  • Tach (Rust-basiert): Sprachunabhängiger Ansatz, passt möglicherweise nicht perfekt zu den Python-Besonderheiten.

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.

Neu in 0.5.2

  1. Aktualisierte Collectors: Flexiblere Möglichkeiten zum Definieren von Klassen und Funktionen, einschließlich erweiterter Regex-Muster.
  2. Leistungssteigerung: Deply läuft jetzt bis zu 10x schneller als zuvor. Durch die Integration mit CI werden Ihre Builds nicht verlangsamt.
  3. Erweiterte Regeln: Zusätzliche Prüfungen für Vererbung, Verwendung von Dekoratoren und Namenskonventionen ermöglichen das Entwerfen detaillierter Richtlinien.

Installation

pip install deply
Nach dem Login kopieren
Nach dem Login kopieren

Sie erhalten die neueste Version, derzeit 0.5.2.

Deply-Konfiguration (deply.yaml)

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$"
Nach dem Login kopieren
Nach dem Login kopieren

Wie es funktioniert:

  1. Die Models-Ebene sammelt Klassen, die von Djangos Model oder AbstractUser erben.
  2. Views-Layer sammelt Code aus Dateien, die mit „views_api.py.“ enden.
  3. Regeln:
  4. disallow_layer_dependencies: Die Ansichtsebene kann nicht direkt von Modellen abhängen.
  5. enforce_function_decorator_usage: Alle Funktionen in Ansichten benötigen entweder (HasPerm und extension_schema) oder staticmethod.

Deply ausführen

Sobald Ihre Konfiguration fertig ist, führen Sie Folgendes aus:

pip install deply
Nach dem Login kopieren
Nach dem Login kopieren
  • --config=another_config.yaml ermöglicht Ihnen die Angabe einer anderen Datei.
  • --report-format=text|json|github-actions steuert, wie Verstöße angezeigt werden.

Zusätzliche Beispiele

Klassenbenennung:

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$"
Nach dem Login kopieren
Nach dem Login kopieren

Alle Klassen in der Serviceschicht müssen mit Service. enden.

Funktionsbenennung:

deply analyze
Nach dem Login kopieren

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.

CI-Integration

Fügen Sie Ihrer CI-Pipeline einen Schritt hinzu:

service:
  enforce_class_naming:
    - type: class_name_regex
      class_name_regex: ".*Service$"
Nach dem Login kopieren

Ihre Pipeline kann ausfallen, wenn Architekturverstöße festgestellt werden.

Zusammenfassung

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.

  • GitHub: https://github.com/Vashkatsi/deply
  • PyPI: https://pypi.org/project/deply/

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!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage