首页 > 后端开发 > Python教程 > Deply:保持 Python 架构干净

Deply:保持 Python 架构干净

Barbara Streisand
发布: 2024-12-30 12:26:09
原创
669 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板