代码结构
代码结构
在一个健康的开发周期中,代码风格,
典型的
README.rst
LICENSE
setup.py
requirements.txt
sample/__init__.py
sample/core.py
sample/helpers.py
docs/conf.py
docs/index.rst
tests/test_basic.py
tests/test_advanced.py
糟糕的特征
得益于
-
多重且混乱的循环依赖关系:假如在
furn.py
内的Table 与Chair 类需要 导入workers.py
中的Carpenter 类以回答类似table.isdoneby()
的问题,并且Carpenter 类需要引入Table 和Chair 类以回答carpenter.whatdo()
这类问题,这就是一种循环依赖的情况。在这种情况下, 您得借助一些不怎么靠谱的 小技巧,比如在方法或函数内部使用import 语句。 -
隐含耦合:
Table 类实现代码中每一个改变都会打破20 个不相关的测试用例,由于它影响了Carpenter 类的代码,这要求谨慎地操作以适应改变。这样的情况意味着Carpenter 类代码中包含了太多关于Table 类的假设关联(或相反) 。 -
大量使用全局变量或上下文:如果
Table 和Carpenter 类使用不仅能被修改而且能被 不同引用修改的全局变量,而不是明确地传递(height, width, type, wood)
变量。您就需要彻底检查全局变量的所有入口,来理解到为什么一个长方形桌子变 成了正方形,最后发现远程的模板代码修改了这份上下文,弄错了桌子尺寸规格的 定义。 -
面条式代码
(Spaghetti code) :多页嵌套的if 语句与for 循环,包含大量复制- 粘贴 的过程代码,且没有合适的分割——这样的代码被称为面条式代码。Python 中有意思 的缩进排版( 最具争议的特性之一) 使面条式代码很难维持。所以好消息是您也许不 会经常看到这种面条式代码。 -
Python 中更可能出现混沌代码:这类代码包含上百段相似的逻辑碎片,通常是缺乏 合适结构的类或对象,如果您始终弄不清手头上的任务应该使用FurnitureTable ,AssetTable 还是Table ,甚至TableNew ,也许您已经陷入了混沌代码中。