我目前正在写一个python库。目前,模块和类以无组织的方式部署,没有合理的设计。当我接近更正式的版本时,我想重新组织类和模块,以便它们具有更好的总体设计。我绘制了一个导入依赖关系图,并且我计划按层级聚合类。另外,我正在考虑对类进行一些修改,以减少这些依赖关系。
对于一个潜在的复杂和潜在的Python库的良好整体设计,你有什么策略?你有没有有趣的建议?
感谢
更新:
我确实是在寻找一个经验法则。例如,假设这种情况发生(初始化的.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,a进口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)。
还有很多其他类似的情况。我的经验法则是至少减少依赖和交叉的数量,以防止高度分支,高度交错的设置,但我可能是错的。
对于层,我的意思是组织我的软件包,以便它们的类/模块依赖于该软件包的内容或另一个包含“较低”服务的软件包。我会将每个软件包视为一个“独立库”,最终依赖于其他软件包,因此不会产生循环依赖。 – 2009-02-09 13:18:48