代码改变世界

意大利面代码

2012-01-09 11:52  康杜  阅读(982)  评论(0编辑  收藏  举报

Spaghetti code是一个反模式(见《A Big Ball of Mud》)。在这个模式中,代码交织在一起,导致可读性、可维护性很差。

image

从编程语言上来看,goto是Spaghetti code的一个显著例子。在运用goto语句的程序中,程序执行指令能够调整到程序中的任何地方。但是这种灵活性会带来复杂性(可读性差,可维护性差)。后来,人们提出了“结构化编程”。

 

是不是“结构化编程”就能解决Spaghtti code了呢? 在我看来,以下的情况依然会导致意大利面代码是出现

1. 不恰当的包依赖。比如具体依赖了抽象,特殊依赖于公共。

2. 随意的类位置。比如一个UI的类写到业务逻辑的包里了,还比如Servlet的类放到工作流程相关的包里。

3. 长方法。一个方法越长,方法里面的if...else...就会越多。当if...else...里面嵌套if...else...的时候,这个方法的可读性就很低了。

对于以上列举的意大利面代码,我的建议是: 专门的人员(比如架构师),制定规矩--比如什么类写到什么地方, 同时做好code review并增加培训的时间。我们在工作中需要做写一段时间的代码,然后有些专门的会议(让我们一起讨论,怎么的代码才是好的代码)。