当前位置:  开发笔记 > 编程语言 > 正文

如何正确组织包/模块依赖树?

如何解决《如何正确组织包/模块依赖树?》经验,为你挑选了1个好方法。

早上好,

我目前正在编写一个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作为独立模块没有意义,例如因为你想将它保持为"私有"进入条形包,我会优先选择1).

还有许多其他类似的案例.我的经验法则是尽量减少依赖关系和交叉的数量,以防止高度分支,高度交织的设置,但我可能是错的.



1> S.Lott..:

"我绘制了一个导入依赖关系图,我计划按层级聚合类."

Python必须像英语(或任何其他自然语言)一样阅读.

导入是一个应具有实际意义的一流声明.按"层级"(无论是什么)组织事物应该清晰,有意义和明显.

不要将类的任意技术分组转换为模块和模块到包中.

使模块和包明显且符合逻辑,以便导入列表显而易见,简单且符合逻辑.

"另外,我正在考虑对类进行一些修改,以减少这些依赖性."

减少依赖性听起来技术性和任意性.它可能不是,但听起来就是这样.没有实际的例子,就不可能说了.

你的目标是清晰.

此外,模块和包是独立的重用单元.(不是类;类,但本身通常不可重用.)您的依赖树应该反映这一点.您的目标是可以整齐,干净地导入到您的应用程序中的模块.

如果您有许多密切相关的模块(或替代实现),那么可以使用包,但要谨慎使用.Python库相对平坦; 并且有一些智慧.


编辑

层之间的单向依赖是一个基本特征.这更多是关于正确的软件设计而不是关于Python.您应该(1)分层设计,(2)设计,以便层之间的依赖关系非常严格,然后(3)在Python中实现.

包装可能不一定精确适合您的分层.这些包在物理上可以是一个平面的目录列表,其依赖关系仅通过import语句表示.

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有