> 백엔드 개발 > 파이썬 튜토리얼 > Deply: Python 아키텍처를 깔끔하게 유지하세요

Deply: Python 아키텍처를 깔끔하게 유지하세요

Barbara Streisand
풀어 주다: 2024-12-30 12:26:09
원래의
666명이 탐색했습니다.

Deply: keep your python architecture clean

대형 Python 프로젝트는 유지관리가 어려운 복잡한 코드베이스로 발전하는 경우가 많습니다. 가져오기, 레이어 및 누가 누구에게 의존하는지 추적하면 금방 혼란스러워질 수 있습니다. Deply가 도와드리겠습니다. 코드 구조를 분석하고 아키텍처 규칙을 적용하여 Python 프로젝트가 성장하는 동안에도 깔끔하고 모듈식이며 유지 관리가 용이하도록 보장합니다.

건축 집행이 중요한 이유

Python의 유연성 덕분에 주의하지 않으면 스파게티 코드를 쉽게 도입할 수 있습니다. 새 모듈, 데코레이터를 추가하거나 클래스 상속 방법을 변경하면 대규모 팀 전체에 미묘한 종속성 문제가 발생할 수 있습니다. 자동화된 검사를 통해 명확한 경계가 적용되어 코드 품질을 높게 유지하는 데 도움이 됩니다. 이 접근 방식은 가독성과 팀 생산성을 높여줍니다.

Deply란 무엇입니까?

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 레이어는 views_api.py로 끝나는 파일에서 코드를 수집합니다.
  3. 규칙:
  4. disallow_layer_dependents: 뷰 레이어는 모델에 직접적으로 의존할 수 없습니다.
  5. enforce_function_ decorator_usage: 뷰의 모든 함수에는 (HasPerm 및 확장_스키마) 또는 정적 메서드가 필요합니다.

실행 중인 배포

구성이 준비되면 다음을 실행하세요.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿