[英]Is passing too many arguments to the constructor considered an anti-pattern?
[英]Why is importing a module from a sibling package considered an anti-pattern?
我剛開始學習如何用 Python 編寫代碼(來自 Java 背景)。
我有這個非常基本的項目結構,使用我可以召集的最簡單的 MVC 形式:
myproject
controllers
__init__.py
controller.py
models
__init__.py
model.py
views
__init__.py
view.py
main.py
假設我從 view.py 開始並且我需要在它和它的控制器之間建立一個鏈接,我知道我必須使用導入命令來導入控制器:
from controllers import controller
我知道這是行不通的,所以我使用相對路徑來嘗試使其工作。
from ..controllers import controller
我也知道這不起作用,因為它無法真正看到文件夾,為了解決這個問題,我需要將 myproject 文件夾本身設置為一個包。 但這對我來說沒有意義。
我在這里讀到這種文件結構幾乎是一種“反模式”。 但為什么? MVC 通過解耦它們的功能在結構上是合理的,因此將它們分離到自己的包中是有意義的。
你不能從“文件”的角度思考,而是從包的角度思考。 你的整個項目應該是它自己的包,它像任何其他包一樣安裝在你的 Python 環境中。 這些之間沒有根本區別:
from django.db import models
from myproject.controllers import controller
django
是一個全局安裝的包。 myproject
應該是一個全局安裝的包。
如果讓一個全局的“ controllers
”模塊四處漂浮是沒有意義的,它顯然應該是一個更大的包的一部分。
在一個包中,如果你願意,你可以進行相對導入,這主要是速記,如果你重命名頂級包可能會有所幫助,但在其他方面是無關緊要的。
始終考慮最終將您的包發布到 PyPI 或構建一個您分發到生產服務器進行安裝的輪子,即使您永遠不會做這些事情中的任何一件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.