Python 如何在monolith代码库中正确命名服务文件和文件夹?
我想听听您对在代码库中命名文件和文件夹的想法。 假设我们在付款范围下定义了不同的供应商服务(paypalService、stripeService等)和退款服务。 考虑支付目录中的以下结构: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 │
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谢谢!非常感谢您的帮助。安装插件,看起来很棒!感谢您提供的见解。我很感激:)