当大家坐下来并计划应该如何组织程序的时候,对于这个具体的程序,还没有任何的经验。在实现功能的时候,会逐渐地学到对原始设计有用的新知识。不应该无视一路走来所吸取的教训,而应该将它们用于软件的重新设计(或重构)中。
灵活性的实现包括许多方面,下面是其中两个:
原型设计:python最棒的功能之一就是可以快速地编写程序。编写原型程序是更充分地了解问题的一种很好的方法。
配置:灵活性有很多种存在形式。配置的目的就是让程序某部分的改变更简单,对于你和用户来说都是这样。
第三点是自动化测试。如果希望轻松改变程序的话,那么自动化测试绝对是必不可少的。使用原地测试,就能保证你的程序在进行修改后还能工作。
在将一些思想融入到程序的结构中后,建议实现一个简单的版本,这个版本的功能可能非常有限。
还能在任何程序设计语言中使用原型设计,但python的强大之处就在于编写一个模型只需要很少的投入,而不用大动干戈。
另外一种更加简单的在程序中引入抽象的方法:从代码中提取符号化常量。
为了标识变量是作为符号化常量对待的,可以用特殊的命名规则——名字之用大写字母,并且用下划线分隔每个单词。
为自己使用方便提取常量是一码事,还要考虑有些常量是要公开给用户的。
这里不是将这些配置变量放在模块的开头,而是将它们放在单独的文件中。实现这个功能的最简单方法就是为配置创建单独的模块。
使用配置文件具有两面性:一方面,配置功能很有用,但对整个项目使用集中、共享的变量库会让项目的模块性下降、整体性上升。一定要确保没有破坏抽象(比如封装)规则。
另外一种方法是使用标准库模块ConfigParser,它的作用是对配置文件使用适当的标准格式。它接受标准的python赋值语法:
greeting = ‘hello,world!’
另外一种在很多程序中使用的配置格式如下:
greeting: hello,world!
需要使用[files]或者[colors]这样的数据头将配置文件划分为几个区段。名称可以随意设定,但需要将它们用方括号括起来。
日志记录在大幅度更改程序内核时候很有用,它可以帮助找到问题和错误所在。日志记录基本上就是收集与程序运行有关的数据,这样可以在随后进行检查(或累计数据)。print语句算是一种简单的日志记录形式。只要在程序开头放上下面这条语句:
log=open(‘log.txt’,’w’)
随后就可以将任何感兴趣的程序状态信息像下面这样放在文件中:
print >> log, (‘Downloading file from URL %s’ % url)
text=urllib.urlopen(url).read()
print >> log, ‘File successfully downloaded’
可以使用标准库中的logging模块,logging是个高级模块,值得学习。
推荐阅读:
《程序员修炼之道》
《重构》
《设计模式》
《测试驱动开发》
《UNIX编程艺术》
《算法导论》
《计算机程序设计艺术》卷1-卷3
《Concepts, Techniques, and Models of Computer Programming》
就算不读完每本书的每一页,也要随手翻翻看,这样能培养在开发过程中的洞察力。