簡體   English   中英

如何正確組織包/模塊依賴樹?

[英]How to properly organize a package/module dependency tree?

早上好,

我目前正在編寫python庫。 目前,模塊和類是以無組織的方式部署的,沒有合理的設計。 當我接近正式發布時,我想重新組織類和模塊,以便它們具有更好的總體設計。 我繪制了導入依賴關系圖,並計划按層級別聚合類。 另外,我正在考慮對類進行一些修改,以減少這些依賴性。

對於潛在復雜且正在制作中的python庫進行總體設計的最佳策略是什么? 您有有趣的建議嗎?

謝謝

更新:

我確實在尋找經驗法則。 例如,假設發生這種情況(為清楚起見刪除了init .py)

foo/bar/a.py
foo/bar/b.py
foo/hello/c.py
foo/hello/d.py

現在,如果您碰巧有d.py導入bar.b和a.py導入hello.c,我認為這是一個糟糕的設置。 另一種情況是

foo/bar/a.py
foo/bar/baz/b.py
foo/bar/baz/c.py

假設a.py和b.py都導入c。 您有以下三種解決方案:1)b導入c,導入baz.c 2)您在foo / bar中移動c。 a.py導入c,b.py導入.c 3)將c移動到其他位置(例如foo / cpackage / c.py),然后a和b都導入cpackage.c

我傾向於3),但是如果c.py作為獨立模塊沒有任何意義,例如,因為您要將其“私有”保留在bar包中,則我會優先使用1)。

還有許多其他類似的情況。 我的經驗法則是盡量減少依賴性和交叉的數量,以防止出現高度分支,高度交錯的設置,但我可能是錯的。

“我繪制了導入依賴關系圖,並計划按層級別聚合類。”

Python必須像英語(或其他自然語言)一樣閱讀。

導入是一流的語句,應具有真實含義。 按“層次”(無論是什么層次)組織事物應該是清晰,有意義和顯而易見的。

不要將類的任意技術分組歸入模塊,而將模塊歸入包。

使模塊和包顯而易見且合乎邏輯,以便導入列表顯而易見,簡單且合乎邏輯。

“此外,我正在考慮對類進行一些修改,以減少這些依賴性。”

減少依賴關系聽起來是技術性和任意性的。 可能不是,但是聽起來是這樣。 沒有實際的例子,這是不可能的。

您的目標是清晰。

而且,模塊和包是獨立的重用單元。 (不是類;是類,但是它本身通常是不可重用的。)您的依賴關系樹應該反映出這一點。 您的目標是可以整潔干凈地導入應用程序的模塊。

如果您有許多密切相關的模塊(或替代實現),則可以使用軟件包,但要謹慎使用。 Python庫相對扁平; 這有一些智慧。


編輯

層之間的單向依賴是一項基本功能。 這更多的是關於適當的軟件設計,而不是Python。 您應該(1)在各層中進行設計,(2)在設計時要使各層之間的依賴性非常嚴格,然后(3)在Python中實現。

這些包可能不一定完全適合您的分層。 這些軟件包實際上可以是目錄的平面列表,其依賴性僅通過import語句表示。

這個問題很模糊。

您可以通過使基本/核心內容從庫的其余部分中不導入任何內容,並從此處導入具體的實現方式來實現此目的。 除了“在導入時沒有彼此導入的兩個模塊”之外,您應該沒問題。

module1.py:

import module2

module2.py:

import module1

這行不通!

這取決於項目,對嗎? 例如,如果您使用的是模型視圖控制器設計,那么您的程序包將以使三組代碼獨立的方式進行結構化。

如果您需要一些想法,請打開site-packages目錄,並查看這些模塊中的一些代碼以了解如何設置它們。

如果不了解該模塊,就沒有正確的方法。 正如阿里所說,這是一個模糊的問題。 您確實只需要分析自己面前的東西,然后找出可能會更好的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM