python - 如何在整体代码库中正确命名服务文件和文件夹?

标签 python service directory naming-conventions modularity

我想听听您对命名代码库中的文件和文件夹的想法。 假设我们在支付范围内定义了不同的供应商服务(paypalService、stripeService 等)和退款服务。 考虑付款目录中的以下结构:

monolith
|
└--payment
     │   __init__.py
     │   views.py
     │   tasks.py
     └───services
     │   │   __init__.py
     │   └───refund
     │       │   __init__.py
     │       │   main.py
     │       │   utils.py
     │   └───vendors
     │       │   __init__.py
     │       └─── stripe
     │          │   __init__.py
     │          │   main.py
     │          │   utils.py
     │       └─── paypal
     │          │   __init__.py
     │          │   main.py
     │          │   utils.py
     │       └─── adyen
     │          │   __init__.py
     │          │   main.py
     │          │   utils.py

在这个结构中,文件名本身并不代表任何东西(例如 main.py ),但是当我们查看完整名称时,包括文件夹,例如( monolith/payment/services/refund/main.py )这个 main.py 名称​​确实给出了给定模块包含其所在服务目录的主要部分的想法。同样的想法适用于所有文件:每个模块的完整路径清楚地描述模块有什么。

有人声称 __init__.py是放置主模块类的合适位置,但我对此进行了研究,但没有遇到这样的用例。 AFAIK 可能的用例 __init__.py是定义如何将目录作为包提供给外界,例如定义__all__这个文件里面对我来说很有意义。

我想出了这个想法(init、main、utils trio)来构建服务目录,我想听听您的想法。所有具有相似名称的文件(例如 main、utils)都让我有点痒痒。这是一个不好的做法吗?构建此类服务目录的替代方法有哪些?

假设:

  • 假设每个模块都应该有自己特定的实用程序。
  • 服务模块足够大,可以为它们创建一个包并将它们拆分为“utils”、“mixins”、“main”等模块。

任何阅读有关此问题的最佳实践的来源也将不胜感激!

最佳答案

问题中提供的结构对我来说看起来不错。这是绝对清楚的。

有很多具有相似名称的文件不是问题(你好,Django!每个包都有 __init__.pymodels.pyadmin.py tests.pytemplatetags.py(或具有相同名称的包)。

对于像解决方案这样的框架来说,拥有许多相似的命名文件是绝对正常的,它允许您创建某种“可插入系统”,以防您现在或将来需要它。

现代编辑器通过添加带有案例父目录名称的前缀/后缀,可以很好地处理不同目录中的同名文件。我最喜欢的 IDE PyCharm 对于这种情况有一个很酷的插件 Tabdir plugin .

我喜欢你的结构。任何现代框架都试图标准化“应用程序或插件文件夹”,这很正常。这是真正的编程,而不是编写大量丑陋的文件并导入它:)

关于python - 如何在整体代码库中正确命名服务文件和文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59224909/

相关文章:

python - 添加到整数列表的列表

linux - 守护进程和服务差异

android - NFC标签检测

c++ - 程序不计算文件扩展名

python - 根据文件名比较目录

UNIX:同一路径上的两个同名目录?

python - 禁用 pylint 警告 E501。什么都不起作用

python - 如何消除由于 scipy/numpy fft 中的零填充而产生的边界效应?

python - 打印元组中的元素

javascript - angularjs .then() 不起作用(then 不是函数)