ホームページ > バックエンド開発 > Python チュートリアル > Deply: Python アーキテクチャをクリーンに保つ

Deply: Python アーキテクチャをクリーンに保つ

Barbara Streisand
リリース: 2024-12-30 12:26:09
オリジナル
669 人が閲覧しました

Deply: keep your python architecture clean

大規模な Python プロジェクトは、保守が困難な複雑なコードベースに進化することがよくあります。インポート、レイヤー、および誰が誰に依存しているかを追跡すると、すぐに混乱が生じる可能性があります。デプリがお手伝いします。コード構造を分析し、アーキテクチャ ルールを適用することで、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. モデル層は、Django の Model または AbstractUser から継承するクラスを収集します。
  2. ビュー層は、views_api.py で終わるファイルからコードを収集します。
  3. ルール:
  4. disallow_layer_dependency: ビュー レイヤーはモデルに直接依存できません。
  5. enforce_function_decorator_usage: ビュー内のすべての関数には (HasPerm および extend_schema) または staticmethod のいずれかが必要です。

実行中の配備

構成の準備ができたら、次を実行します。

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の統合

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 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート