从把3000行代码重构成15行代码谈起

如果你认为这是一个标题党,那么我真诚的恳请你耐心的把文章的第一部分读完,然后再下结论。如果你认为能够戳中您的G点,那么请随手点个赞。

把三千行代码重构为15行

那年我刚毕业,进了现在这个公司。公司是搞数据中心环境监控的,里面充斥着嵌入式、精密空调、总线、RFID的概念,我一个都不懂。还好,公司之前用Delphi写的老客户端因为太慢,然后就搞了个Webform的替代,恰好我对Asp.Net还算了解,我对业务的不了解并不妨碍我称成为这个公司的一个程序员。小公司也有小公司的好,人少,进去很快负责代码开发。我当然也就搞这个数据中心智能管理系统啦。

这个系统非常的庞大,尤其牛逼的是支持客户端组态,然后动态生成网页,数据还能通过Socket实时监控(那时我还真就不懂网络编程)。这个对于当时的我来说,真真是高、大、上呐!!当时跟着了解整个系统大半个月才算能够调试,写一些简单的页面。

在维护系统的过程中,时不时要扩展一些功能,也就接触了下面这个类:

图片有压缩,点击这里查看清晰的原图。

看到没有,就是当年最最流行的三层架构的产物,对于刚出茅庐的毛头小子来说,这是多么专业的文件头注释,还有反射也就算了,这构造函数还能静态的,还能私有的?那时刚接触这么高大上的代码的我,瞬间给跪了!

但是,类写多了,我就感觉越来越别扭,就是下面这段代码:

图片有压缩,点击这里查看清晰的原图。

每增加一个表,除了要改接口、要改DAL、要改BLL之外,还得在这个工厂类添加一个方法,真真是累到手抽筋,即使有当时公司了的G工给我推荐的神器——动软代码生成器,这粘贴复制的几遍,也是让我感觉到异常繁琐,有时候打键盘稍微累了点,还把复制出来代码改错了,你妹的,难道这就是程序员该干的事情,不,绝对不是!我想起了一句至理名言:当你觉得代码重复出现在程序中的时候,就应该重构了。是的,在这句话的指导下,我开始了折腾,决定挑战这个高大上的代码,事实证明,思想的力量是无穷的。

那么,怎么修改呢,仔细观察之后,发现其中className的生成跟返回的类型非常类似,只是一个是类名,一个是字符串,这两者之间应该能够关联起来。于是google了一下(当时GFW还没猖獗起来哈),隐隐约约就找到了“反射”这两个字,深入了解之后,确定可以完成。

接下来,就是返回的类型了,返回的类型并不固定,但是似乎很有规律……这个似乎好像在哪里见过,对了,模板,C++课程上有讲过的,于是再次google,了解到了C#中使用了泛型代替了C++中的模板。在学习完泛型和反射之后,并参考了网上的一些文章,我捣鼓出了下面的代码:

图片有压缩,点击这里查看清晰的原图。

没错,就是它了,三层架构年代最流行的工厂类……

看着原来滚十几屏幕的代码,变成了十多行的代码,真是爽到了骨子里去了,太干净了!唯一让我担忧的是,我进公司的时候,帮忙整理公司申请软件著作权都是需要代码量的,根据代码多少行来评估软件的大小,万一老板知道了我非但没有帮公司增加代码量,还减少了,会不会立即把我开掉?我没敢给我们老板展示我优秀的成果,所幸,这段代码非但没有出过任何问题,还避免了以前同事老是在新增一个类之后,把代码复制过来,但是没有正确修改的问题,大大提高了效率。虽然,我没敢大事宣布我的劳动成果,但是这次成功的修改,则彻底让我走上了代码重构的不归路。

看到这里,大家应该知道这个案例是否真实的了吧。我相信,从08年开始的码农们,看到这种类似的代码绝对不比我少。那么,我想告诉你们的是什么呢?

  • 要在编程过程中多思考
  • 编程的思想很重要,请多看点经典的书
  • 从小处着眼,慢慢重构,尤其在应对一个大型的系统
  • 当重复出现的时候,你应该考虑重构了
  • 粘贴复制的代码越少,你的系统越稳定

少用代码生成器

我们来分析一下,为什么我之前的前辈会写出上面的代码。我归结起来有以下几点:

  • 因为使用了动软代码生成器,生成代码方便,就没多想了。
  • 三层架构的概念倒是了解了,但是没有去深入思考就拿来应用
  • 遇到重复的代码,没有重构的概念,这是思想的问题——思想比你的能力重要

至今为止,还是很多人使用代码生成器,那么我们应该怎么对待这个问题呢。我认为,代码生成器确实可以减少你不少工作,但是少用,那些重复性的工作,除了部分确实是没有办法的,其他大部分都是可以通过框架解决的,举例来说,像三层架构,真正需要用到代码生成器的,也就是Model类而已,其他的完全可以在框架中完成。因此你要竭尽全力的思考怎么在框架中来减少你的重复性工作,而不是依赖于代码生成器

另外,如果你还是在用相关的代码生成工具,请重新定义“动软代码生成器”的代码模板,自己写一个模板;或者使用CodeSmith来完全制定自己的代码生成,因为动软给的代码模板真心乱,比如下面这段代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
for ( int n = 0; n < rowsCount; n++)
{
     model = new DBAccess.Model.eventweek();
     if (dt.Rows[n][ "GroupNo" ].ToString()!= "" )
     {
         model.GroupNo= int .Parse(dt.Rows[n][ "GroupNo" ].ToString());
     }
     if (dt.Rows[n][ "Week0" ].ToString()!= "" )
     {
         model.Week0= int .Parse(dt.Rows[n][ "Week0" ].ToString());
     }
     if (dt.Rows[n][ "Week1" ].ToString()!= "" )
     {
         model.Week1= int .Parse(dt.Rows[n][ "Week1" ].ToString());
     }
}

首先,你就不能用 var row=dt.Rows[n] 替代吗?其次,直接用int.Parse效率多低?再次,dt.Rows[n]["Week0"]NULL怎么办?

不要重复发明轮子

我们再来看看其他的一些代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
  • 9
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
### 回答1: 在使用Qt实现3000代码的程序时,你需要了解以下内容: 1. Qt的基础知识,包括Qt的类层次结构、信号和槽、布局管理器等。 2. Qt的开发环境,包括如何使用Qt Creator进开发、调试和测试。 3. 如何使用Qt的设计工具(如Qt Designer)来设计用户界面。 4. 如何在Qt中编写代码来实现功能,包括如何使用Qt的API来访问系统资源、如何使用数据模型和视图来处理数据等。 5. 如何使用版本控制系统(如git)来管理你的代码,以便在开发过程中进版本控制和协同工作。 6. 如何利用Qt的文档和社区支持来解决问题和获得帮助。 ### 回答2: QT是一个跨平台的应用程序开发框架,可用于开发图形用户界面(GUI)和非GUI的应用程序。使用QT可以大大简化程序的开发过程,并且具有良好的可移植性和可扩展性。 在实现一个3000代码的程序时,使用QT框架可以带来很多优势。首先,QT提供了丰富的现的GUI组件和工具,使得开发者能够快速构建出美观、交互丰富的用户界面。开发者可以利用QT的可视化设计器来设计和布局界面,通过拖拽和设置属性等方式来进快速的界面构建。 其次,QT提供了一套强大的信号和槽机制,使得程序的各个模块之间能够方便地进通信和交互。通过连接信号和槽的方式,不同的对象可以在特定事件发生时触发相应的操作,从而实现程序的逻辑控制。 另外,QT还提供了丰富的功能模块和工具类,如文件操作、网络通信、数据库访问等,使得开发者能够快速实现程序所需的各种功能。同时,QT还支持多线程编程,可以充分利用多核处理器的性能,提高程序的并发性能。 通过使用QT开发一个3000代码的程序,开发者可以少写很多重复性的代码,减少出错的概率,并且能够更加集中精力在程序的核心逻辑上。此外,QT的跨平台性能也能够使程序能够在不同的操作系统上运,提高了程序的可移植性和可扩展性。 综上所述,使用QT来实现一个3000代码的程序,可以大大简化开发过程,提高开发效率,并且能够更好地管理程序的组件和模块,使程序具有良好的可维护性和可扩展性。 ### 回答3: QT 是一种开源的跨平台应用开发框架,被广泛应用于建立图形界面应用程序。用 QT 实现一个3000代码程序是很常见的工作。 首先,需要创建一个 QT 项目。在 QT 创建项目的过程中,可以选择适合的模板,例如基于窗口的应用程序或控制台应用程序。 然后,根据需求设计用户界面。QT 提供了丰富的 GUI 组件和布局管理器,可以方便地创建各种界面元素,并且可以通过拖放方式将它们放置在应用程序窗口中。 接下来,需要编写程序逻辑。在 QT 中,可以使用 C++ 或 QML 等编程语言来实现程序逻辑。根据项目的规模和需求,可以将代码多个模块,使用面向对象的方式编写,使代码结构清晰、易于维护。 在编写代码的过程中,可以利用 QT 提供的丰富功能,例如信号和槽机制、多线程处理、网络通信、数据库操作等,来满足各种需求。 在编写完后,需要进测试并调试程序。QT 提供了一套完整的工具集,可以帮助开发者进单元测试、集测试和调试等工作,以确保程序运正常。 最后,将程序编译可执文件或部署到目标平台中。QT 提供了跨平台部署工具,可以将程序打包独立的应用程序,方便用户安装和运。 总结来说,使用 QT 实现一个3000代码的程序,需要进项目创建、界面设计、编程实现、测试调试和部署等一系列工作,而 QT 提供的丰富功能和工具可以极大地简化开发过程,提高开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值