首頁 > 後端開發 > Python教學 > Deply:保持 Python 架構乾淨

Deply:保持 Python 架構乾淨

Barbara Streisand
發布: 2024-12-30 12:26:09
原創
658 人瀏覽過

Deply: keep your python architecture clean

大型 Python 專案通常會演變成難以維護的複雜程式碼庫。追蹤進口、層以及誰依賴誰很快就會變得一團糟。 Deply 隨時為您提供協助。它分析您的程式碼結構並強制實施架構規則,確保您的 Python 專案即使在成長時也保持乾淨、模組化且易於維護。

為什麼建築執法很重要

Python 的靈活性使得如果我們不小心的話很容易引入意大利麵條式程式碼。添加新模組、裝飾器,甚至更改類別的繼承方式可能會在大型團隊中引入微妙的依賴問題。透過自動檢查強制執行的清晰邊界有助於保持較高的程式碼品質。這種方法提高了可讀性和團隊生產力。

什麼是部署?

Deply 是一個獨立的工具:

  1. 讓您在 YAML 設定中定義項目層(如視圖、模型、服務)。
  2. 透過規則(例如,class_inherits、decorator_usage、file_regex)將程式碼元素收集到這些層。
  3. 強制執行架構策略以防止意外的耦合或命名錯誤。

為什麼不使用其他工具?

  • pydeps:專注於視覺化導入。
  • import-linter:檢查導入約束。
  • pytestarch 或 pytest-archon:依賴為架構編寫基於程式碼的測試。
  • Tach(基於 Rust):與語言無關的方法,可能與 Python 細節不完全一致。

Deply 的優點在於它超越了導入,還考慮了裝飾器、類別繼承、檔案模式等等。其基於 YAML 的配置可以更輕鬆地合併到 CI 管道中,而無需編寫新的測試檔案。

0.5.2 中的新功能

  1. 升級的收集器:更靈活的方式來定義類別和函數,包括高階正規表示式模式。
  2. 效能提升:Deply 現在的運行速度比以前快 10 倍。將其與 CI 整合不會減慢您的建置速度。
  3. 擴充規則:對繼承、裝飾器使用和命名約定進行額外檢查,讓您可以設計精細的策略。

安裝

pip install deply
登入後複製
登入後複製

您將獲得最新版本,目前為 0.5.2。

部署配置 (deply.yaml)

在專案根目錄中建立一個 deply.yaml 檔案。至少,定義要分析的路徑、要排除的任何檔案、層和規則。下面是一個類似 Django 專案的範例片段。

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$"
登入後複製
登入後複製

工作原理:

  1. models層收集繼承自Django的Model或AbstractUser的類別。
  2. 視圖層從以views_api.py結尾的檔案中收集程式碼。
  3. 規則:
  4. disallow_layer_dependency:視圖層不能直接依賴模型。
  5. enforce_function_decorator_usage:視圖中的所有函數都需要(HasPerm和extend_schema)或靜態方法。

運行部署

配置準備就緒後,執行:

pip install deply
登入後複製
登入後複製
  • --config=another_config.yaml 允許您指定不同的檔案。
  • --report-format=text|json|github-actions 控制違規的顯示方式。

其他範例

類別命名:

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$"
登入後複製
登入後複製

服務層中的所有類別都必須以Service結尾。

函數命名:

deply analyze
登入後複製

任務中的所有函數都必須以task_開頭。

專業提示:將多個條件與 bool 結合形成高級邏輯(must、any_of、must_not),確保您可以製定高度具體的規則。

持續集成集成

為您的 CI 管道新增一個步驟:

service:
  enforce_class_naming:
    - type: class_name_regex
      class_name_regex: ".*Service$"
登入後複製

如果發現任何架構違規,您的管道可能會失敗。

包起來

Deply 旨在幫助您在架構違規變成耗時的重構之前捕獲它們。透過自動化這些檢查,即使在大型團隊中,您也可以保持清晰的分層設計。

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

請隨意測試並依照自己的需求調整配置。如果您有疑問或想法,請查看儲存庫以了解有關提交問題或貢獻的詳細資訊。快樂編碼!

以上是Deply:保持 Python 架構乾淨的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板