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

推荐订阅源

博客园 - Franky
有赞技术团队
有赞技术团队
宝玉的分享
宝玉的分享
雷峰网
雷峰网
Hugging Face - Blog
Hugging Face - Blog
V
V2EX
大猫的无限游戏
大猫的无限游戏
博客园 - 司徒正美
D
Docker
T
The Blog of Author Tim Ferriss
罗磊的独立博客
博客园 - 叶小钗
酷 壳 – CoolShell
酷 壳 – CoolShell
Blog — PlanetScale
Blog — PlanetScale
月光博客
月光博客
J
Java Code Geeks
Jina AI
Jina AI
博客园 - 【当耐特】
C
Check Point Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
腾讯CDC
Last Week in AI
Last Week in AI
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V
Visual Studio Blog

浮生笔记

时机的重要性 回答dayu博客的几个问题 学会做选择 我理想的城市 如何选择一个适合的城市 马来西亚游记 回首2023,展望2024 从ChatGPT聊起 菲律宾旅游攻略笔记 深圳游记 香港游记 怎样赚钱----我理解的商业模式 用户界面与跨平台 使用telnet通过IMAP协议读取QQ邮箱 信息成本-----从ChatGPT到情报学 买断制到订阅制----兼谈消费频次 我眼中的CSDN 迁移博客内容到静态博客 Hugo使用Jane主题支持搜索实现 C语言和Lua的相互调用示例代码 从放逐之城看经济学 不同产业的分析 回首2021,展望2022 游戏中的经济学 Windows获取网络地址、子网掩码等 -fsanitize=address 参数作用 C++ 编译器支持标准判断 C++ 编译器支持标准判断 VS Code的golang开发配置 之 代码提示 二叉树遍历的非递归算法的实现
从重构到重写
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