突然,我决定在 CSDN 写这篇文章。我写文章不多,主要因为没有充足的时间,写出的文章也没有什么技术含量,呵呵。之前写的一些文章都是从我自己的博客站首发的,这次选在 CSDN 首发是因为此篇文章主要关于之前我在 CSDN 社区发的两个分享贴   纯JS编写的贪吃蛇

 

不知道有没有去用“查看源代码”了解过其实现原理?还是大多数人以为这只是一个游戏,与自己的应用无关么?

其实不然。

我的贴子下面有人随口说道,“和前几年写的纯js蛇比,有什么过人的地方或者优势?” 是的,这就是本文要讲的话题:优势在于我更专注于业务,而不是其他与业务无关的方面,比如计分、排名、样式等。

在我写这个小贪吃蛇游戏之前,也知道之前肯定有人做过这件事。如贴中所说,主要是因为看看到有人写的那个俄罗斯方块挺好,于是就也想试试看能不能也写个游戏。很单纯地,我开始了,从回之前的贴子到我的贪吃蛇完成,花了三个小时左右。在这样的时间里,没想过去找什么参考。

 

刚才我去找了一些前两年的话题,确实找到一些有用的资料,比如就在 CSDN 论坛里这样一个讨论贪吃蛇算法与数据建模的贴子,现在看来确实很有参考价值,只不过我当时没有看,没有读前人的代码,这样的好处就显现出来了:我可以以自己的思路来完全专注于业务。

后来又找到 CSDN 上其他网友的贴子相关博客,都是很棒的前例,我刚刚才看到;甚至在联合开发网还看到这样的一个小项目。都是很不错的资源。如果你对代码这东西有感觉,那不妨去比较一下这些代码与我的代码,确实是有一些区别的。区别还是在于,我更专注于业务。

 

可以看到,我的贪吃蛇例子里没有使用任何图片,简单的 HTML 文档结构,简洁直白的样式,因为这些都不是必须的。在其他项目里,大量的键盘事件捕获、大量的样式操作充斥其中,你看到难道不头疼吗?如果是在一个项目里,如果让你来维护,你觉得这样的项目你愿意继续吗?

 

是的,业务才是最重要的,请我们记住这一条:始终把问题缩小为最核心的那部分,把其他部门都剥离开来!如果你没有做到,那你的代码就混乱,就缺乏可扩展性,就缺乏可维护性,在软件工程里,这意味着死亡!

从我的代码里,你发现如果要改变蛇的样式、要增加积分、排名、增减速度等一切扩展都是很方便的事,因为它使用了事件驱动机制;你发现如果要使蛇能穿透墙外壁到达墙对侧(即仅蛇碰到自身才算 game over)也是如此简单,因为它的逻辑清晰可辨。

 

一个问题的解决总伴随着很多方向的小问题,我们要专注,就要将大问题分开成若干个小问题,再将注意力分别专注在这些小问题上,并分别解决之,最终将所有问题解决。这个中间需要注意的一个“玄机”是,这些小问题与“全局协调者”之间的关系。小问题只需要按全局协调者的要求返回一定的数据即可,其中的具体逻辑是可以随意修改的。(所谓全局协调者指的是类似C语言中的 main 函数,它负责调用各个步骤的小函数来解决整个问题。这些小函数就是解决我在这里说的“小问题”的真实代码;而 main 上下文就充当了全局协调者的角色)
这样组织之后,各部分就能分别专注于自己的业务,并由全局协调者来完成调度。之后人们如果需要来维护你的代码,来维护这个项目,他需要修改哪一部分,他修改对应的部分。

 

相信很多童鞋都拜读过 jQuery 的代码,不知道有何感想。jQuery 之所以能够有如此强大的扩展能力,是因为它的代码条理清楚,由小问题组织的小功能分别专注于其自身的那部分业务。

 

其实分治策略是早就提出的一种重要思想了,却在现代编程实践中渐渐地被人们所抛弃、遗忘了。这导致了很多乱成一团的代码,难以维护的代码。这很可惜。

如果你有一些感想,我希望读罢上文,你能联想到不唐突的javascript、面向过程、可复用、接口、粒度、SOA 等开发思想。

 

希望有用。

 

 

 


p.s 轻松一下,去试玩一下上面谈到的 js 贪吃蛇 吧

 

声明:此文由陈计节原创,原文地址 https://blog.jijiechen.com/post/focus-on-the-business-when-coding.aspx,欢迎转载,转载时请注意出处。