第 9 章 由外而内的设计(1)
张刚
设计和编码本是一体。由外而内的设计,也叫作意图导向的编程,是把设计的思考过程、编码实现过程以及演进式设计完美结合在一起的方法。熟练掌握由外而内的设计,可以大幅提升编码效率和质量。本章将介绍由外而内的设计。
9.1 如何由外而内
图 9.1 是一个关于由外而内设计策略的大致示意图。其中圆形代表实际的编码实现,弧形代表在前一步导出的接口,数字代表实现的顺序。
![](https://static001.geekbang.org/files/resource/ebook/100011/image00380.jpeg)
由外而内的设计包括如下几个步骤。
选择一个系统功能,或者需要探索的问题。
思考实现该功能或解决该问题,需要哪些更低层的模块,每个模块分别需要承担什么样的责任。
用在第 2 步假设的模块和责任完成编码,当然此时这些模块和责任可能并不存在。
逐个选择第 3 步中未实现的责任,把它作为一个新的待解决的问题,回到第 1 步。
为了更清晰地说明由外而内设计的具体做法,本节我们以俄罗斯方块游戏作为范例。
9.1.1 案例说明
俄罗斯方块(Tetris)是一个历史悠久的电脑小游戏。像我们这一代人(我是 70 后),小时候玩过的第一款电子游戏,大概率就是俄罗斯方块。1984 年,俄罗斯人阿列克谢·帕基特诺夫发明了这个游戏,它从此经久不衰,至今在休闲类游戏中仍然占有一席之地。
游戏规则
俄罗斯方块的规则非常简单,屏幕上方持续地产生不同形状的方块,玩家通过按键旋转方块或者调整方块的位置,让方块落到合适的位置,留下尽可能少的空洞。如果底部堆积的方块形成了完整的行,这些方块就可以自行消除,同时玩家会因此得分。消除的行数越多,对应的分数奖励就越高。
当然,如果方向和位置调整得不好,就会留下填补不了的空洞,形不成整行,没有消除掉的方块会不断堆积,越来越高。一旦堆积的方块到达屏幕顶端,游戏就结束了。
公开
同步至部落
取消
完成
0/2000
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
![](https://static001.geekbang.org/resource/image/d0/e4/d0880927e2a522a038be2d04bf19dfe4.png)
本文介绍了意图导向的编程方法,并以俄罗斯方块游戏为例详细阐述了该设计方法的步骤和应用。作者从整体架构出发,分层设计游戏逻辑,并用代码表达初始架构。通过引入接口和适配器模式,实现了游戏的初始化和方块的创建。强调了让游戏尽快运行的重要性,同时提倡逐步演进的设计理念。文章还介绍了如何在用户界面上实际显示方块,并逐步加入行为,完善游戏功能。通过实现moveDown方法,作者展示了如何用代码表达设计意图,以及如何继续由外而内的设计过程。由外而内的设计方式具有延迟决策、保证概念的抽象、避免过度设计等优势。此外,文章还介绍了由外而内带来的意图导向的编程、设计顺序和编程顺序的统一以及由外而内意味着随时集成等概念。最后,文章提到了测试替身的概念和价值,强调了测试替身在依赖解耦和自动化测试中的广泛应用。整体而言,本文通过具体案例生动地展示了意图导向的编程方法,对读者理解和应用该设计方法具有一定的指导意义。文章内容丰富,深入浅出,适合对意图导向编程方法感兴趣的读者阅读学习。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《软件设计:从专业到卓越》
《软件设计:从专业到卓越》
立即购买
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论