惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hacker News: Ask HN
Hacker News: Ask HN
IT之家
IT之家
S
SegmentFault 最新的问题
T
Tailwind CSS Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
J
Java Code Geeks
博客园 - 聂微东
雷峰网
雷峰网
阮一峰的网络日志
阮一峰的网络日志
The Cloudflare Blog
博客园_首页
大猫的无限游戏
大猫的无限游戏
博客园 - 三生石上(FineUI控件)
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 【当耐特】
腾讯CDC
Apple Machine Learning Research
Apple Machine Learning Research
酷 壳 – CoolShell
酷 壳 – CoolShell
V
V2EX
宝玉的分享
宝玉的分享
小众软件
小众软件
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Hugging Face - Blog
Hugging Face - Blog
月光博客
月光博客
NISL@THU
NISL@THU
T
The Exploit Database - CXSecurity.com
C
CXSECURITY Database RSS Feed - CXSecurity.com
WordPress大学
WordPress大学
有赞技术团队
有赞技术团队
Blog — PlanetScale
Blog — PlanetScale
aimingoo的专栏
aimingoo的专栏
L
LINUX DO - 热门话题
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
F
Fortinet All Blogs
博客园 - Franky
L
Lohrmann on Cybersecurity
S
Secure Thoughts
量子位
V
Vulnerabilities – Threatpost
Last Week in AI
Last Week in AI
博客园 - 叶小钗
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
L
LINUX DO - 最新话题
I
InfoQ
C
CERT Recently Published Vulnerability Notes
Security Archives - TechRepublic
Security Archives - TechRepublic
P
Proofpoint News Feed
G
GRAHAM CLULEY
Cisco Talos Blog
Cisco Talos Blog

浮生笔记

时机的重要性 回答dayu博客的几个问题 学会做选择 我理想的城市 如何选择一个适合的城市 马来西亚游记 回首2023,展望2024 从ChatGPT聊起 菲律宾旅游攻略笔记 深圳游记 香港游记 怎样赚钱----我理解的商业模式 用户界面与跨平台 使用telnet通过IMAP协议读取QQ邮箱 信息成本-----从ChatGPT到情报学 买断制到订阅制----兼谈消费频次 我眼中的CSDN 迁移博客内容到静态博客 Hugo使用Jane主题支持搜索实现 C语言和Lua的相互调用示例代码 从放逐之城看经济学 不同产业的分析 回首2021,展望2022 游戏中的经济学 Windows获取网络地址、子网掩码等 -fsanitize=address 参数作用 C++ 编译器支持标准判断 C++ 编译器支持标准判断 VS Code的golang开发配置 之 代码提示 二叉树遍历的非递归算法的实现 我的Chrome插件 golang 获取get参数 关于写代码的几个看法 golang编程之我见 Linux 网络编程之 Select 构建之法读书笔记 (1) 友情链接 Effective Morden C++ 读书笔记(3) 二进制协议 vs 文本协议 asio制作使用ssl通信的证书 gdb 7.11 Linux 获取网卡信息 《构建之法》读后感 由买冰箱想到的 2014年年终总结 聊聊我对写好程序的认识 编程技巧之表格驱动编程 经验搜索排名---google已经做过类似的了(我想多了) 有关编程语言的认识
从重构到重写
DennisThink · 2017-06-25 · via 浮生笔记

文章目录

从重构到重写

1 由来

公司在4月份的时候一个团队整体离职(我最怕这个),他们的服务器代码交接是我组长去做的。由于新项目要给客户部署,所以我们需要熟悉上个团队的代码。之前的代码是用java写的,用了比较多的框架,而目前接手的组长和我对于java都不是很熟悉。所以摆在我们面前的有两条路: 1.熟悉Java代码、相关的框架以及开发工具,继续使用java开发。 2.根据业务流程和目前的java代码以及文档,采用C++重写。 领导决定采用方案2,因此重构和完善变成了重写。

2 开始重写

2.1 熟悉文档

我们最开始的工作是阅读留下来的文档,主要的阅读部分是接口文档。接口文档基本描述了各个模块交互的消息定义、字段含义以及交互流程。我跟组长也把目前的业务流程过了一遍,就开始了代码编写的工作。

2.2 代码编写

我们的C++代码的网络库采用的是asio,没有boost依赖。之前的项目都是采用这个库,所以这部分基本没有怎么花费时间。接下来就是编写对每一条消息的处理了,接口文档中没有对这部分的业务流程进行较为详细的描述,也没有对应的流程图之类,所以只能一边写,一边阅读java代码。

* 我们是翻译

因为对java框架不熟悉,刚刚开始的时候,往往需要好久才能找到消息处理的地方。后来就是根据java代码,编写对应的c++处理流程。在这个过程中对于我来说比较难的部分就是不要有处理流程的遗漏,这个部分在组长建议下,采用了一步一步来对比的方式,过程很痛苦,效果还不错。

谁骗了我们

到底是代码在说谎,还是文档在骗人。                ---昊哥

这个过程中比较郁闷的事情就是代码和文档的描述不一致,而只有等测试的时候才发现这个问题,原来昊哥有先见之明。记得在知乎上看到@左耳朵耗子 说的文档描述了Why,而代码描述了How,所以我们做的事情大约就是How(java)—->Why—–>How(c++)。

2.3 代码测试

祝贺我们,终于编写完成了其中的一个服务程序,可以进行测试了。在收发短信的测试过程中,发现由于短信的消息定义不一致,导致每次发送的时间戳相同。客户端在收到短信消息以后,会检查时间戳,相同的不予以显示,因此每次只看到了一条。这个也是过了好久才发现,也说明了熟悉业务的重要性。

3.写在最后

经历了一个半月的工作,终于完成了初步满足功能的程序,也是时候进行简单的总结了。

3.1 编程语言是相通的

学过《编译原理》之后,觉得自己了解了程序编译的过程,特别是自学了号称最难学的c++之后,就认为新的编程语言不在话下。接手这个开发任务半个月之后,才知道真的是too young,to naive。java的代码看起来云里雾里的,配置文件的对应关系,函数的调用流程…分分钟干翻我。所以还是Good good study,day day up吧。

3.2 技术栈的差别很大

每一个框架都在发明属于自己的语言。

就拿做Web开发举例吧。

编程语言 Web框架
java Structs、Spring、Hibernate、SpringMVC
Python Django、Flask
Php Laravel、Phalcon、Symfony2
C CGI,apache模块
c++ asio,muduo…

编程语言多,对应的框架多,还是可以理解的。但是每种框架的逻辑相差很大,导致的问题就是是你在换一种编程语言的同时,几乎所有的那个编程语言的框架的知识都被替换掉了,所以不能轻易的转换编程语言。

文章的最后,感谢侯俊杰老师《深入浅出MFC》带我走过了学习了MFC的最开始的时光,让我在使用这个框架的时候有迹可循。

文章作者 DennisThink

上次更新 2017-06-25

许可协议 CC BY-NC-ND 4.0