放弃手机的第五天我在做什么
今天主要完成了飞行棋后端socket方面的架构设计更新。
由于第一版力求速度,没有考虑任何的架构设计理念,也没有封装任何的类,这就导致把整个项目的设计变成了一个面向过程的设计。而实际上这样是没有办法维护的,在架构设计的理念里,有一条非常重要的基本原则,那就是水平扩展而不是垂直升级。意思是最好不要把原本的设计重新做全盘的整改升级,而是在原有的基础之上添加新功能。
但是如果是面向过程开发,这种扩展几乎是不可能的。因为过程与过程之间的耦合程度太高了,面向对象的设计可以很清楚的划清每个类的责任界限从而进行有效解耦。
作为一名退役的OIer,在算法比赛里从来都是追求速度编程,因为时间就那么点,思考已经占了绝大多数的时间了,剩下的时间如果还进行需求工程分析再写份功能文档的话,恐怕会来不及。不说面向对象,就是在变量名上,也是力求简洁,最好是1个字母,最长也不要超过5个字母,像a,n,i,x,y这种都是常见的变量,不会因为要看清它的功能而给它写一个驼峰命名的变量名的。(毕竟比赛时大部分代码只要这次看懂了就行了)
修改过程中,考虑到有可能未来还要继续用到socket,是每个项目的socket分配一个端口还是所有项目共用一个socket再以命名空间(namespace)区分开。后来还是决定采用第二个方案,原因是socket.io框架提供了一个很便捷的命名空间的操作,这样一来我就不用每次添加项目都去修改一下nginx的配置文件。不过也有缺点,万一某个项目出错使得node关闭了,会导致其他项目也受到牵连。
经过多轮的思想上的迭代,最终方案是:
1 2 3 4 5 6 7 8 9 10 11 12 |
-- |--project1 | |--OtherClass.js | |--Input.js | |--Output.js | |--project2 | |--OtherClass.js | |--Input.js | |--Output.js | |--index.js |
index.js作为请求分发和启动文件,每个项目各有目录,目录下设立Input.js和Output.js分别用于获取来自index.js的请求和发送计算结果给客户端。
这个设计很有效,我只需要在Input.js和Output.js里面添加相对应的console.log语句就能获取到输入输出的数据,很方便的就能检验结果是否正确。而运行时,只需要在根目录运行node index.js就行了。
关于架构设计,我在掘金上找到了一篇很好的文章可供参考,感谢作者的分享。
https://juejin.im/entry/59dc7e6bf265da43305d6d86
-- 于 ,共写了1051个字;
-- 文内使用到的标签:
- 下一篇:放弃手机的第四天我在做什么
- 上一篇:放弃手机的第六天我在做什么