Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在monolith代码库中正确命名服务文件和文件夹?_Python_Service_Directory_Naming Conventions_Modularity - Fatal编程技术网

Python 如何在monolith代码库中正确命名服务文件和文件夹?

Python 如何在monolith代码库中正确命名服务文件和文件夹?,python,service,directory,naming-conventions,modularity,Python,Service,Directory,Naming Conventions,Modularity,我想听听您对在代码库中命名文件和文件夹的想法。 假设我们在付款范围下定义了不同的供应商服务(paypalService、stripeService等)和退款服务。 考虑支付目录中的以下结构: monolith | └--payment │ __init__.py │ views.py │ tasks.py └───services │ │ __init__.py │ └───refund │

我想听听您对在代码库中命名文件和文件夹的想法。 假设我们在付款范围下定义了不同的供应商服务(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/return/main.py
),这个main.py名称确实表明给定模块包含其所在的任何服务目录的主要部分。同样的想法也适用于所有文件:每个模块的完整路径清楚地描述了模块所拥有的内容

有些人声称,
\uuuuu init\uuuuuuuy.py
是放置主模块类的合适位置,但我对此进行了研究,没有发现这样的用例。
\uuuu init\uuuuu.py
的一个可能的用例是定义如何将目录作为一个包提供给外部世界,例如,在这个文件中定义
\uuuu all\uuuuuuuu
,对我来说是有意义的

我提出了这个想法(init、main、utils三者)来构造服务目录,我想听听您的想法。所有文件都有类似的名字,比如main、utils,这让我有点发痒。这种做法不好吗?构造此类服务目录的替代方法有哪些

假设:

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

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

问题中提供的结构在我看来很好。这是非常清楚的

拥有许多名称相似的文件不是问题(你好,Django!每个包都有
\uu init\uuuuuuuuupy
models.py
admin.py
tests.py
templatetags.py
(或具有相同名称的包)

对于一个类似框架的解决方案来说,有很多类似的命名文件是绝对正常的,它允许您创建某种“可插入系统”,以备您现在或将来需要

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


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

这样的设置从根本上说没有什么错,但也没有什么特别好的地方(根据您的编辑器,打开14个
main.py
文件可能会让人感到困惑…。如果您已经开始朝这个方向思考,那么也许是时候放弃您的单片设计,让服务独立(并且可插拔?)apps?ps:我会保持
\uuuu init\uuuu.py
文件精简,原因与上述相同(我没有检查Django的较新版本,但早期版本在
\uuuu init\uuuuuu.py
中保留了大量代码)嘿,比约恩,谢谢你在这方面的努力。打开14个
main.py
文件确实让我担心,但这种情况已经存在很长一段时间了。我们的文件名一直是通用的,例如
views.py
tasks.py
models.py
等。还有什么其他命名文件的方法吗?例如,在stripeservice下文件夹,我们是否应该将
main.py
重命名为
stripe\u service.py
?wdyt?通用文件名也有随时间累积随机行李的趋势,因此我一般不太喜欢。有一些传统是将单个任务模块命名为与其包名相同的名称(
from.stripe import stripe;stripe.foo(…)
)。我并不是说这更好,还有一点值得一提,那就是保留许多小型模块,这些模块在不同的后端执行相同的任务,并且在结构上相似。将主模块命名为与包名称相同听起来很棒。至少,这是我迄今为止拥有的最美观的解决方案:D谢谢!非常感谢您的帮助。安装插件,看起来很棒!感谢您提供的见解。我很感激:)